カスタムフィールドが表示されない
-
advanced custom fieldsというプラグインを使って
チェックボックスを備えたカスタムフィールドを作成しました。
(投稿画面にメタボックスとして表示しています。)一方で、私のサイトは管理者権限以外の人(投稿者権限の人)も何人かいることを想定しているため、
以下のトピックにあったコードを使用して、自分の記事だけしか
表示されないようにしています。管理画面で他のユーザの投稿数やアップロード数を表示したくない
このトピックにあったコードを貼りつけたところ、希望のものは出来たのですが、
投稿画面にプラグインで作成したメタボックスが表示されなくなりました。他のプラグインを全て停止したり、functions.phpを変更したり、
ということを行ったところ、メタボックスが表示されない原因は
トピックにあったコードみたいでした。私としては、両方を表示できるようにしたいと思っているのですが、
コードをなにか変更するのがよいのでしょうか?
それとも、別のプラグインやコードでメタボックスを表示するのが
よいのでしょうか?いろいろと分かっていなくて申し訳ないです。
込み入った話で失礼かと思いますが、
どなたかなにかを教えていただけます方、よろしくお願いします。
-
こんにちは
コードの中身は、チェックしていませんが
'index.php' == basename( $_SERVER['PHP_SELF']
を追加してみてはどうでしょう
( wp-includes/theme.php 1630 にページの検出方法が見えます )
function query_set_only_author($wp_query) { global $current_user; if(is_admin() && !current_user_can('edit_others_posts') && 'index.php' == basename( $_SERVER['PHP_SELF'] ) { $wp_query->set('author', $current_user->ID); $screen = get_current_screen(); add_filter('views_'.$screen->id, 'fix_post_counts'); add_filter('views_upload', 'fix_media_counts'); } }
nobitaさん
ご回答ありがとうございます。nobitaさんが提示してくださいましたコードを
そのまま貼り付けてみたところ、
httpエラー 500が発生しました。原因もわかっていないのですが、
どのようにするとよいのでしょうか?すみません
ifが閉じていませんでした
function query_set_only_author($wp_query) { global $current_user; if(is_admin() && !current_user_can('edit_others_posts') && 'index.php' == basename( $_SERVER['PHP_SELF'] ) ) { $wp_query->set('author', $current_user->ID); $screen = get_current_screen(); add_filter('views_'.$screen->id, 'fix_post_counts'); add_filter('views_upload', 'fix_media_counts'); } }
nobitaさん
たびたび申し訳ありません。nobitaさんがあらためて提示してくださいました
コードを貼りつけたところ、
さきほどと同じように
httpエラー 500が発生しました。functions.phpを空にしたり、プラグインを全て停止しても
同様にhttpエラー 500が発生しました。何度も申し訳ないのですが、
どのようにするとよいのでしょうか?良かれと思って回答したのですが、かえって混乱を招いてしまったようです。
私の環境で、エラーが発生するかどうか、チェックしましたが、エラーは発生していませんでした。
お手数ですが、デバッグモードにしていただき、どのようなエラーが発生しているか書き込んでいただけますか?
チェックに使ったコードは、以下です。
functions.php
// Show only posts and media related to logged in author add_action('pre_get_posts', 'query_set_only_author'); //ダッシュボードだけで、で動作するか echoさせてみましたが、動作するように見えます if ( 'index.php' == basename( $_SERVER['PHP_SELF'] ) ) { echo 'dashboard'; }else{ echo 'another'; } //提示した変更を加えたコードで、デバッグモード+Debug Barプラグインでチェックしましたが問題ありませんでした function query_set_only_author($wp_query) { global $current_user; if(is_admin() && !current_user_can('edit_others_posts') && 'index.php' == basename( $_SERVER['PHP_SELF'] ) ) { $wp_query->set('author', $current_user->ID); $screen = get_current_screen(); add_filter('views_'.$screen->id, 'fix_post_counts'); add_filter('views_upload', 'fix_media_counts'); } } // Fix post counts function fix_post_counts($views) { global $current_user, $wp_query; unset($views['mine']); $types = array( array('status' => NULL), array('status' => 'publish'), array('status' => 'draft'), array('status' => 'pending'), array('status' => 'trash') ); foreach($types as $type) { $query = array( 'author' => $current_user->ID, 'post_type' => 'post', 'post_status' => $type['status'] ); $result = new WP_Query($query); if($type['status'] == NULL): $class = ($wp_query->query_vars['post_status'] == NULL) ? ' class="current"' : ''; $views['all'] = sprintf(__('<a href="%s"'. $class .'>' . __('All') . ' <span class="count">(%d)</span></a>', 'all'), admin_url('edit.php?post_type=post'), $result->found_posts); elseif($type['status'] == 'publish'): $class = ($wp_query->query_vars['post_status'] == 'publish') ? ' class="current"' : ''; $views['publish'] = sprintf(__('<a href="%s"'. $class .'>' . __('Published') . ' <span class="count">(%d)</span></a>', 'publish'), admin_url('edit.php? post_status=publish&post_type=post'), $result->found_posts); elseif($type['status'] == 'draft'): $class = ($wp_query->query_vars['post_status'] == 'draft') ? ' class="current"' : ''; $views['draft'] = sprintf(__('<a href="%s"'. $class .'>'. __('Draft') . ((sizeof($result->posts) > 1) ? "s" : "") .' <span class="count">(%d)</span></a>', 'draft'), admin_url('edit.php?post_status=draft&post_type=post'), $result->found_posts); elseif($type['status'] == 'pending'): $class = ($wp_query->query_vars['post_status'] == 'pending') ? ' class="current"' : ''; $views['pending'] = sprintf(__('<a href="%s"'. $class .'>'. __('Pending') .' <span class="count">(%d)</span></a>', 'pending'), admin_url('edit.php?post_status=pending&post_type=post'), $result->found_posts); elseif($type['status'] == 'trash'): $class = ($wp_query->query_vars['post_status'] == 'trash') ? ' class="current"' : ''; $views['trash'] = sprintf(__('<a href="%s"'. $class .'>'. __('Trash') .' <span class="count">(%d)</span></a>', 'trash'), admin_url('edit.php?post_status=trash&post_type=post'), $result->found_posts); endif; } return $views; } // Fix media counts function fix_media_counts($views) { global $wpdb, $current_user, $post_mime_types, $avail_post_mime_types; $views = array(); $count = $wpdb->get_results(" SELECT post_mime_type, COUNT( * ) AS num_posts FROM $wpdb->posts WHERE post_type = 'attachment' AND post_author = $current_user->ID AND post_status != 'trash' GROUP BY post_mime_type ", ARRAY_A ); foreach($count as $row) if ($count && $row != 0) { $_num_posts[$row['post_mime_type']] = $row['num_posts']; $_total_posts = array_sum($_num_posts); $detached = isset($_REQUEST['detached']) || isset($_REQUEST['find_detached']); }; if (!isset($total_orphans)) $total_orphans = $wpdb->get_var(" SELECT COUNT( * ) FROM $wpdb->posts WHERE post_type = 'attachment' AND post_author = $current_user->ID AND post_status != 'trash' AND post_parent < 1 "); $matches = wp_match_mime_types(array_keys($post_mime_types), array_keys($_num_posts)); foreach ($matches as $type => $reals) foreach ($reals as $real) $num_posts[$type] = ( isset($num_posts[$type])) ? $num_posts[$type] + $_num_posts[$real] : $_num_posts[$real]; $class = (empty($_GET['post_mime_type']) && !$detached && !isset($_GET['status'])) ? ' class="current"' : ''; $views['all'] = "<a href='upload.php'$class>" . sprintf(__(__('All') .' <span class="count">(%s)</span>', 'uploaded files'), number_format_i18n($_total_posts)) . '</a>'; foreach ( $post_mime_types as $mime_type => $label ) { $class = ''; if (!wp_match_mime_types($mime_type, $avail_post_mime_types)) continue; if (!empty($_GET['post_mime_type']) && wp_match_mime_types($mime_type, $_GET['post_mime_type'])) $class = ' class="current"'; if (!empty( $num_posts[$mime_type])) $views[$mime_type] = "<a href='upload.php?post_mime_type=$mime_type'$class>" . sprintf(translate_nooped_plural($label[2], $num_posts[$mime_type]), $num_posts[$mime_type]) . '</a>'; } $views['detached'] = '<a href="upload.php?detached=1"' . ($detached ? ' class="current"' : '') . '>' . sprintf(_x('Unattached <span class="count">(%s)</span>', 'detached files'), $total_orphans) . '</a>'; return $views; }
とんでもないです。
私は完全に手詰まりの状況でどうしてよいかわからなかったので、
nobitaさんのように、なにかしらアドバイスや意見などをいただけると
大変助かります。先ほどnobitaさんが提示してくださいましたコードを
貼り付けたところ、問題なく動作しました。
(ダッシュボードではdashboardと、それ以外ではanotherと表示されていました。)私がエラーを発生させていたコードは以下のようなものです。
<?php function query_set_only_author($wp_query) { global $current_user; if(is_admin() && !current_user_can('edit_others_posts') && 'index.php' == basename( $_SERVER['PHP_SELF'] ) ) { $wp_query->set('author', $current_user->ID); $screen = get_current_screen(); add_filter('views_'.$screen->id, 'fix_post_counts'); add_filter('views_upload', 'fix_media_counts'); } } ?> <?php // Show only posts and media related to logged in author add_action('pre_get_posts', 'query_set_only_author'); function query_set_only_author($wp_query) { global $current_user; if(is_admin() && !current_user_can('edit_others_posts')) { $wp_query->set('author', $current_user->ID); $screen = get_current_screen(); add_filter('views_'.$screen->id, 'fix_post_counts'); add_filter('views_upload', 'fix_media_counts'); } } // Fix post counts function fix_post_counts($views) { global $current_user, $wp_query; unset($views['mine']); $types = array( array('status' => NULL), array('status' => 'publish'), array('status' => 'draft'), array('status' => 'pending'), array('status' => 'trash') ); foreach($types as $type) { $query = array( 'author' => $current_user->ID, 'post_type' => 'post', 'post_status' => $type['status'] ); $result = new WP_Query($query); if($type['status'] == NULL): $class = ($wp_query->query_vars['post_status'] == NULL) ? ' class="current"' : ''; $views['all'] = sprintf(__('<a href="%s"'. $class .'>' . __('All') . ' <span class="count">(%d)</span></a>', 'all'), admin_url('edit.php?post_type=post'), $result->found_posts); elseif($type['status'] == 'publish'): $class = ($wp_query->query_vars['post_status'] == 'publish') ? ' class="current"' : ''; $views['publish'] = sprintf(__('<a href="%s"'. $class .'>' . __('Published') . ' <span class="count">(%d)</span></a>', 'publish'), admin_url('edit.php? post_status=publish&post_type=post'), $result->found_posts); elseif($type['status'] == 'draft'): $class = ($wp_query->query_vars['post_status'] == 'draft') ? ' class="current"' : ''; $views['draft'] = sprintf(__('<a href="%s"'. $class .'>'. __('Draft') . ((sizeof($result->posts) > 1) ? "s" : "") .' <span class="count">(%d)</span></a>', 'draft'), admin_url('edit.php?post_status=draft&post_type=post'), $result->found_posts); elseif($type['status'] == 'pending'): $class = ($wp_query->query_vars['post_status'] == 'pending') ? ' class="current"' : ''; $views['pending'] = sprintf(__('<a href="%s"'. $class .'>'. __('Pending') .' <span class="count">(%d)</span></a>', 'pending'), admin_url('edit.php?post_status=pending&post_type=post'), $result->found_posts); elseif($type['status'] == 'trash'): $class = ($wp_query->query_vars['post_status'] == 'trash') ? ' class="current"' : ''; $views['trash'] = sprintf(__('<a href="%s"'. $class .'>'. __('Trash') .' <span class="count">(%d)</span></a>', 'trash'), admin_url('edit.php?post_status=trash&post_type=post'), $result->found_posts); endif; } return $views; } // Fix media counts function fix_media_counts($views) { global $wpdb, $current_user, $post_mime_types, $avail_post_mime_types; $views = array(); $count = $wpdb->get_results(" SELECT post_mime_type, COUNT( * ) AS num_posts FROM $wpdb->posts WHERE post_type = 'attachment' AND post_author = $current_user->ID AND post_status != 'trash' GROUP BY post_mime_type ", ARRAY_A ); foreach($count as $row) if ($count && $row != 0) { $_num_posts[$row['post_mime_type']] = $row['num_posts']; $_total_posts = array_sum($_num_posts); $detached = isset($_REQUEST['detached']) || isset($_REQUEST['find_detached']); }; if (!isset($total_orphans)) $total_orphans = $wpdb->get_var(" SELECT COUNT( * ) FROM $wpdb->posts WHERE post_type = 'attachment' AND post_author = $current_user->ID AND post_status != 'trash' AND post_parent < 1 "); $matches = wp_match_mime_types(array_keys($post_mime_types), array_keys($_num_posts)); foreach ($matches as $type => $reals) foreach ($reals as $real) $num_posts[$type] = ( isset($num_posts[$type])) ? $num_posts[$type] + $_num_posts[$real] : $_num_posts[$real]; $class = (empty($_GET['post_mime_type']) && !$detached && !isset($_GET['status'])) ? ' class="current"' : ''; $views['all'] = "<a href='upload.php'$class>" . sprintf(__(__('All') .' <span class="count">(%s)</span>', 'uploaded files'), number_format_i18n($_total_posts)) . '</a>'; foreach ( $post_mime_types as $mime_type => $label ) { $class = ''; if (!wp_match_mime_types($mime_type, $avail_post_mime_types)) continue; if (!empty($_GET['post_mime_type']) && wp_match_mime_types($mime_type, $_GET['post_mime_type'])) $class = ' class="current"'; if (!empty( $num_posts[$mime_type])) $views[$mime_type] = "<a href='upload.php?post_mime_type=$mime_type'$class>" . sprintf(translate_nooped_plural($label[2], $num_posts[$mime_type]), $num_posts[$mime_type]) . '</a>'; } $views['detached'] = '<a href="upload.php?detached=1"' . ($detached ? ' class="current"' : '') . '>' . sprintf(_x('Unattached <span class="count">(%s)</span>', 'detached files'), $total_orphans) . '</a>'; return $views; } ?>
nobitaさんが提示してくださいましたコードと
「管理画面で他のユーザの投稿数やアップロード数を表示したくない」で
表示されていたコードを両方そのまま貼り付けたことで、
httpエラー 500が発生していました。自分でも混乱している状況なのですが、
どう対応すると良いのでしょうか?「管理画面で他のユーザの投稿数やアップロード数を表示したくない」で
表示されていたコードを両方そのまま貼り付けたことで、
httpエラー 500が発生していました。関数は、同じ名前のものが2つあってはいけないので、私のテストコードを削除して、動作するようにすればいいです。
動かなかったら、動いたコードとの違いを、丹念に調べれば、違いが見つかると思います。
nobitaさん
私がいろいろと勘違いしていたみたいです。
以下のコードを
add_action('pre_get_posts', 'query_set_only_author'); function query_set_only_author($wp_query) { global $current_user; if(is_admin() && !current_user_can('edit_others_posts')) { $wp_query->set('author', $current_user->ID); $screen = get_current_screen(); add_filter('views_'.$screen->id, 'fix_post_counts'); add_filter('views_upload', 'fix_media_counts'); } }
以下のように変更する、ということで大丈夫でしょうか。
function query_set_only_author($wp_query) { global $current_user; if(is_admin() && !current_user_can('edit_others_posts') && 'index.php' == basename( $_SERVER['PHP_SELF'] ) ) { $wp_query->set('author', $current_user->ID); $screen = get_current_screen(); add_filter('views_'.$screen->id, 'fix_post_counts'); add_filter('views_upload', 'fix_media_counts'); } }
以上の変更で、
エラーは発生しなくなりました。しかし、投稿者権限で記事一覧を見てみると、
自分の記事だけでなく、全ての記事が一覧で表示されていました。
(「管理画面で他のユーザの投稿数やアップロード数を表示したくない」に
記載されていたコードが効かなくなりました。)お手数ですが、その他なにかコードや方法などありますでしょうか?
私の書き方の問題もあったと思いますが、
現状を改めて報告します。以下のコードを貼り付けました。
<?php // Show only posts and media related to logged in author add_action('pre_get_posts', 'query_set_only_author'); function query_set_only_author($wp_query) { global $current_user; if(is_admin() && !current_user_can('edit_others_posts') && 'index.php' == basename( $_SERVER['PHP_SELF'] ) ) { $wp_query->set('author', $current_user->ID); $screen = get_current_screen(); add_filter('views_'.$screen->id, 'fix_post_counts'); add_filter('views_upload', 'fix_media_counts'); } } // Fix post counts function fix_post_counts($views) { global $current_user, $wp_query; unset($views['mine']); $types = array( array('status' => NULL), array('status' => 'publish'), array('status' => 'draft'), array('status' => 'pending'), array('status' => 'trash') ); foreach($types as $type) { $query = array( 'author' => $current_user->ID, 'post_type' => 'post', 'post_status' => $type['status'] ); $result = new WP_Query($query); if($type['status'] == NULL): $class = ($wp_query->query_vars['post_status'] == NULL) ? ' class="current"' : ''; $views['all'] = sprintf(__('<a href="%s"'. $class .'>' . __('All') . ' <span class="count">(%d)</span></a>', 'all'), admin_url('edit.php?post_type=post'), $result->found_posts); elseif($type['status'] == 'publish'): $class = ($wp_query->query_vars['post_status'] == 'publish') ? ' class="current"' : ''; $views['publish'] = sprintf(__('<a href="%s"'. $class .'>' . __('Published') . ' <span class="count">(%d)</span></a>', 'publish'), admin_url('edit.php? post_status=publish&post_type=post'), $result->found_posts); elseif($type['status'] == 'draft'): $class = ($wp_query->query_vars['post_status'] == 'draft') ? ' class="current"' : ''; $views['draft'] = sprintf(__('<a href="%s"'. $class .'>'. __('Draft') . ((sizeof($result->posts) > 1) ? "s" : "") .' <span class="count">(%d)</span></a>', 'draft'), admin_url('edit.php?post_status=draft&post_type=post'), $result->found_posts); elseif($type['status'] == 'pending'): $class = ($wp_query->query_vars['post_status'] == 'pending') ? ' class="current"' : ''; $views['pending'] = sprintf(__('<a href="%s"'. $class .'>'. __('Pending') .' <span class="count">(%d)</span></a>', 'pending'), admin_url('edit.php?post_status=pending&post_type=post'), $result->found_posts); elseif($type['status'] == 'trash'): $class = ($wp_query->query_vars['post_status'] == 'trash') ? ' class="current"' : ''; $views['trash'] = sprintf(__('<a href="%s"'. $class .'>'. __('Trash') .' <span class="count">(%d)</span></a>', 'trash'), admin_url('edit.php?post_status=trash&post_type=post'), $result->found_posts); endif; } return $views; } // Fix media counts function fix_media_counts($views) { global $wpdb, $current_user, $post_mime_types, $avail_post_mime_types; $views = array(); $count = $wpdb->get_results(" SELECT post_mime_type, COUNT( * ) AS num_posts FROM $wpdb->posts WHERE post_type = 'attachment' AND post_author = $current_user->ID AND post_status != 'trash' GROUP BY post_mime_type ", ARRAY_A ); foreach($count as $row) if ($count && $row != 0) { $_num_posts[$row['post_mime_type']] = $row['num_posts']; $_total_posts = array_sum($_num_posts); $detached = isset($_REQUEST['detached']) || isset($_REQUEST['find_detached']); }; if (!isset($total_orphans)) $total_orphans = $wpdb->get_var(" SELECT COUNT( * ) FROM $wpdb->posts WHERE post_type = 'attachment' AND post_author = $current_user->ID AND post_status != 'trash' AND post_parent < 1 "); $matches = wp_match_mime_types(array_keys($post_mime_types), array_keys($_num_posts)); foreach ($matches as $type => $reals) foreach ($reals as $real) $num_posts[$type] = ( isset($num_posts[$type])) ? $num_posts[$type] + $_num_posts[$real] : $_num_posts[$real]; $class = (empty($_GET['post_mime_type']) && !$detached && !isset($_GET['status'])) ? ' class="current"' : ''; $views['all'] = "<a href='upload.php'$class>" . sprintf(__(__('All') .' <span class="count">(%s)</span>', 'uploaded files'), number_format_i18n($_total_posts)) . '</a>'; foreach ( $post_mime_types as $mime_type => $label ) { $class = ''; if (!wp_match_mime_types($mime_type, $avail_post_mime_types)) continue; if (!empty($_GET['post_mime_type']) && wp_match_mime_types($mime_type, $_GET['post_mime_type'])) $class = ' class="current"'; if (!empty( $num_posts[$mime_type])) $views[$mime_type] = "<a href='upload.php?post_mime_type=$mime_type'$class>" . sprintf(translate_nooped_plural($label[2], $num_posts[$mime_type]), $num_posts[$mime_type]) . '</a>'; } $views['detached'] = '<a href="upload.php?detached=1"' . ($detached ? ' class="current"' : '') . '>' . sprintf(_x('Unattached <span class="count">(%s)</span>', 'detached files'), $total_orphans) . '</a>'; return $views; } ?>
すると、自分の記事だけでなく、全ての記事が表示される、
というようになっていますが、
投稿画面でadvanced custom fieldsのカスタムフィールドは
表示されました。
という状況です。私自身が混乱していて、何度も報告してしまい、
本当に申し訳ないです。引き続き、方法などありましたら、教えていただきたいです。
私は
http://ja.forums.wordpress.org/topic/15002?replies=2
のコードで解決しました。間違っていました。
index.php を edit.phpに書き換えると、投稿一覧
メディアライブラリも必要であれば、
`
&& ‘upload.php’ == basename( $_SERVER[‘PHP_SELF’] )
`
も、追加してください。それぞれが、動作するようになると思います。
- トピック「カスタムフィールドが表示されない」には新たに返信することはできません。