プライベート/パブリック投稿を使用して、ログインしていないユーザーのプライベート投稿を非表示にし、作成者がすべてのユーザーのプライベート投稿を表示できるようにするワードプレス サイトをセットアップしようとしています。
「posts_where」フィルターを使用してこれを設定しようとしていますが、機能しません。
これは私のループ/クエリ コードです。非公開の投稿をフィルタリングするページで 2 つのループを使用する必要があることに注意してください。また、作成者が functions.php で非公開の投稿を表示できるようにしました。
<?php
// filter private posts in user not permitted to view
function privates_control($where) {
if( current_user_can('read_private_posts')) return $where;
global $wpdb;
return " $where AND {$wpdb->posts}.post_status != 'private' "; // or add your
custom status
}
$feature_args = array('post_type' => array( 'post', 'work', 'people', 'events' ),
'posts_per_page' => -1,
'orderby' => 'date', 'order' => 'DSC');
$feature_query = new WP_Query();
add_filter('posts_where', 'privates_control');
$feature_query->query($feature_args);
?>
<?php if ($feature_query->have_posts()) : while ($feature_query->have_posts()) :
$feature_query->the_post(); ?>
<?php the_title(); ?>
<?php endif;?>
<?php wp_reset_query();?>
<?php wp_reset_postdata();?>
<?php
// this is the first loop
$box_args = array('post_type' => array( 'post', 'work', 'people', 'events' ),
'posts_per_page' => -1,
'orderby' => 'date', 'order' => 'DSC');
$boxes_query = new WP_Query();
add_filter('posts_where', 'privates_control');
$boxes_query->query($box_args);
?>
// this is the first loop
<?php if ($boxes_query->have_posts()) : while ($boxes_query->have_posts()) :
$boxes_query->the_post(); ?>
<?php the_title(); ?>
<?php endif;?>
<?php wp_reset_query();?>
<?php wp_reset_postdata();?>
誰かがこの混乱を理解してくれることを願っています、ありがとう