プラグインがすべてのテーマとすべてのクエリに対して機能すると仮定します。
あなたは
<?php
add_filter('posts_where', 'check_show_posts');
function check_show_posts($where) {
global $wpdb;
$query = "
SELECT {$wpdb->prefix}posts.ID as ID
FROM {$wpdb->prefix}posts
INNER JOIN {$wpdb->prefix}postmeta m1
ON ({$wpdb->prefix}posts.ID = m1.post_id)
WHERE
{$wpdb->prefix}posts.post_status = 'publish'
AND ({$wpdb->prefix}posts.post_type = 'post' OR {$wpdb->prefix}posts.post_type = 'page')
AND (m1.meta_key = 'show_posts' AND m1.meta_value = '0')
GROUP BY {$wpdb->prefix}posts.ID
DESC;
";
$posts = $wpdb->get_col($query);
if($posts) {
$post_list = implode(',', $posts);
$where .= sprintf(' AND ID NOT IN (%s)', $post_list);
}
return $where;
}
アップデートのようなものを使用することができます。クエリがIDを返すか、いないかどうかを確認するためにif($posts)
条件を追加しました。
投稿やページが表示されないため、動作しません。 –
理由は、あなたはshow_posts = 0の投稿/ページを持っていない可能性があります。コードを更新し、問題の修正を追加しました。 – tamilsweet
@talimsweetそれは 'AND ID NOT IN(418,400)'を追加しましたが、それらの投稿に正しいメタフィールド/値があるので、そうしてはいけません。 –