例えば、カスタム投稿タイプでカスタム投稿を作った際に「管理画面には自分の投稿したページのみ表示させたい」という場合に使える方法です。
カスタム投稿ページで自分の投稿のみ表示させる
カスタム投稿タイプで表示される記事は、通常は他のユーザーの記事も含めて全ての記事が表示されるようになっています。
例えば、複数人で運用しているサイトで「ログインしているアカウントの投稿のみが表示されるようにしたい」という場合もあるかと思います。
投稿一覧で自分の投稿のみ表示させる
下記のようなコードで自分の投稿のみ表示させることが可能です。
[rml_read_more]
//管理画面で他ユーザーの投稿を非表示にする
function exclude_other_posts( $wp_query ) {
//管理者でなければ
if (!current_user_can('administrator')) {
if ( isset( $_REQUEST['post_type'] ) && post_type_exists( $_REQUEST['post_type'] ) ) {
$post_type = get_post_type_object( $_REQUEST['post_type'] );
$cap_type = $post_type->cap->edit_other_posts;
} else {
$cap_type = 'edit_others_posts';
}
if ( is_admin() && $wp_query->is_main_query() && ! $wp_query->get( 'author' ) && ! current_user_can( $cap_type ) ) {
$user = wp_get_current_user();
$wp_query->set( 'author', $user->ID );
}
}
}
add_action( 'pre_get_posts', 'exclude_other_posts' );
他のユーザーのメディアを非表示にする
他のユーザーが投稿で使ったメディアを非表示にできます。
function show_only_authorimage( $where ){
global $current_user;
//現在の URL が WordPress の管理画面側のページなら
if(is_admin()){
// ログインユーザーが投稿者なら
if(current_user_can('author') ){
if( isset( $_POST['action'] ) && ( $_POST['action'] == 'query-attachments' ) ){
$where .= ' AND post_author='.$current_user->data->ID;
}
}
}
return $where;
}
add_filter( 'posts_where', 'show_only_authorimage' );
まとめ
運用上、他のユーザーの投稿を表示させたくないという場合に有効です😃
※phpを扱うことになるので、操作は注意しましょう。