「functions.php」タグアーカイブ

投稿一覧の投稿数は、自分のもののみ表示にして、自分の投稿数を取得して表示する WordPress BuddyPressカスタマイズメモ

投稿一覧画面で、自分の投稿数のみカウントして表示する

WordPressのSNSプラグイン、BuddyPressを導入すると不特定多数のメンバーが参加することになる。

管理者ではなく、参加するメンバーが記事を投稿した場合、誰でも全員の投稿を見れるようになっているのをカスタマイズして、自分の投稿のみ表示するようにした。

投稿者の「投稿画面」では、自分の投稿のみ表示させる方法で紹介した。

でも、そのままでは、投稿数が変になるので、そこを修正。


 ↓↓↓

 

functions.php へ記述

wp_count_postsで、投稿一覧のページで表示される記事数

//自分の投稿のみの投稿数を取得してその数に代入して表示

function count_author_posts( $counts, $type = 'post', $perm = '' ) {
 if ( !is_admin() || current_user_can('administrator') ) {
  return $counts; //管理者や管理画面じゃない場合はそのまま出力
 }
 global $wpdb;
 if ( ! post_type_exists( $type ) )
  return new stdClass;
 $cache_key = _count_posts_cache_key( $type, $perm ) . '_author';
 $counts = wp_cache_get( $cache_key, 'counts' );
 if ( false !== $counts ) {
  return $counts;
 }
 $query = "SELECT post_status, COUNT( * ) AS num_posts FROM {$wpdb->posts} WHERE post_type = %s";
 $query .= $wpdb->prepare( " AND ( post_author = %d )", get_current_user_id() );
 $query .= ' GROUP BY post_status';
 $results = (array) $wpdb->get_results( $wpdb->prepare( $query, $type ), ARRAY_A );
 $counts = array_fill_keys( get_post_stati(), 0 );
 foreach ( $results as $row ) {
  $counts[ $row['post_status'] ] = $row['num_posts'];
 }
 $counts = (object) $counts;
 wp_cache_set( $cache_key, $counts, 'counts' );
 return $counts;
}
add_filter( 'wp_count_posts', 'count_author_posts', 10, 3 );

これで投稿数を、自分の投稿のみをカウントして出力できる。
 

合わせて変更が必要なカスタマイズ案

投稿者の「投稿画面」では、自分の投稿のみ表示させる方法

・upした画像は投稿者本人しか見えないようにする

こちらも参照。

WordPressの記事投稿画面で、新規投稿時にタイトルの入力を必須にする WordPress BuddyPressカスタマイズメモ

WordPressログイン画面の「W」のロゴを他の画像に変え、リンク先、マウスホバーの文言変更

WordPressのSNSプラグイン、BuddyPressを導入すると不特定多数のメンバーが参加することになる。

WordPressに慣れていない人が使うことも想定できるので、タイトルなしのまま新規投稿すると「タイトルなし」となり、ダサいので、タイトル入力を必須にしておこう。


 

functions.php へ記述

WordPressにはタイトルを必須にするような設定はない。

functions.phpに記述して、記事投稿画面にjavascriptで、タイトルが記入されてない時にアラートを出すようにする。

//記事投稿タイトル必須

function required_title() {
?>
<script type="text/javascript">
jQuery(document).ready(function($){
if('post' == $('#post_type').val()){
$("#post").submit(function(e){
  if('' == $('#title').val()) {
  alert('タイトルを入力してください');
  $('#ajax-loading').css('visibility', 'hidden');
  $('#publish').removeClass('button-primary-disabled');
  $('#title').focus();
  return false;
  }
});}});
</script>
<?php
}
add_action('admin_head-post-new.php', 'required_title');
add_action('admin_head-post.php', 'required_title');

この例では、新規投稿、投稿の編集でタイトルの入力を必須にしている。

同様に、固定ページ用でもタイトル入力が必須になる。

WordPressメニューの変更、非表示、IDの調べ方「投稿」→「記事」、「コメント」→「あなたの記事へのコメント」へ、メニューの文言変更 WordPress BuddyPressカスタマイズメモ

WordPressのメニューの文言を変更する方法

WordPressのSNSプラグイン、BuddyPressを導入してSNSを構築する場合、「コメント」だけだと自分が書いたコメントなのか、人が自分に対して書いたコメントなのかが分からないのでメニューを変更したい。

今回は、「投稿」→「記事」へ変更。
「コメント」→「あなたの記事へのコメント」に変更する。

 

functions.php へ記述

管理画面のメニューの文言を変更。
ちなみに順番を入れ替えたり、サブメニューの文言を変更したりもできる。

//投稿→記事、コメント→あなたの記事へのコメント

function change_post_label() {
global $menu;
global $submenu;
$menu[5][0] = '記事';
$menu[25][0] = 'あなたの記事へのコメント';
}
add_action( 'admin_menu', 'change_post_label' );
global $sabmenu;

サブメニューを変更しないのであれば、この1行は別になくてもいい。
 

メニューID一覧とサブメニューのID一覧を紹介

メニューとサブメニューのID(key/キー)一覧

$menu[2] // ダッシュボード
  $submenu['index.php'][0] //ホーム
  $submenu['index.php'][10] //更新
$menu[4] // セパレーター(区切り線)
$menu[5]  // 投稿
  $submenu['edit.php'][5] //投稿一覧
  $submenu['edit.php'][10] //新規投稿
  $submenu['edit.php'][15] //カテゴリー
  $submenu['edit.php'][16] //タグ
$menu[10] // メディア
  $submenu['upload.php'][5] //タグ
  $submenu['upload.php'][10] //新規追加
$menu[15] // リンク
  $submenu['link-manager.php'][5] //リンク一覧
  $submenu['link-manager.php'][10] //新規追加
  $submenu['link-manager.php'][15] //リンクカテゴリー
$menu[20] // 固定ページ
  $submenu['edit.php?post_type=page'][5] //固定ページ一覧
  $submenu['edit.php?post_type=page'][10] //新規追加
$menu[25] // コメント
  $submenu['edit-comments.php'][0] //すべてのコメント
$menu[26] // お問い合わせ
$menu[59] // セパレーター(区切り線)
$menu[60] // 外観
  $submenu['themes.php'][5] //テーマ
  $submenu['themes.php'][7] //ウィジェット
  $submenu['themes.php'][10] //メニュー
$menu[65] // プラグイン
  $submenu['plugins.php'][5] //インストール済みプラグイン
  $submenu['plugins.php'][10] //新規追加
  $submenu['plugins.php'][15] //プラグインエディター
$menu[70] // プロフィール
  $submenu['users.php'][5] //ユーザー一覧
  $submenu['users.php'][10] //新規追加
  $submenu['users.php'][15] //あなたのプロフィール
$menu[75] // ツール
  $submenu['tools.php'][5] //利用可能なツール
  $submenu['tools.php'][10] //インポート
  $submenu['tools.php'][15] //エクスポート
$menu[80] // 設定
  $submenu['options-general.php'][10] //一般
  $submenu['options-general.php'][15] //投稿設定
  $submenu['options-general.php'][20] //表示設定
  $submenu['options-general.php'][25] //ディスカッション
  $submenu['options-general.php'][30] //メディア
  $submenu['options-general.php'][35] //プライバシー
  $submenu['options-general.php'][40] //パーマリンク設定
$menu[99] // セパレーター(区切り線)

 

プラグインなどで勝手に追加されるメニューのIDを調べる方法

functions.phpへ

function check_post_label_id() {
    global $menu;
    global $submenu;

    var_dump($menu);
    var_dump($submenu);
}
add_action( 'admin_menu', 'check_post_label_id' );

これを書いて、ページ(ソース)を見ると

array(数字) {[0]->string(数字)"メニューの単語"[1]=>string(数字)"スラッグ"......}

って感じの文字の羅列が見えるので、

“メニューの単語” の前にある array(数字)数字が”メニューの単語”のIDになっている。