プラグインを書いていますが、問題があります。WordPress がサイトの投稿とページを表示しているときに、カスタム フィールド show_post が 0 の場合にその投稿/ページをスキップしたい (これは簡単な例です)。どうすればいいですか?
これはテーマではなくプラグイン用であるため、テーマを編集してそれらの投稿/ページをスキップすることはできません。
プラグインを書いていますが、問題があります。WordPress がサイトの投稿とページを表示しているときに、カスタム フィールド show_post が 0 の場合にその投稿/ページをスキップしたい (これは簡単な例です)。どうすればいいですか?
これはテーマではなくプラグイン用であるため、テーマを編集してそれらの投稿/ページをスキップすることはできません。
プラグインをすべてのテーマとすべてのクエリで機能させたいと仮定します。
次のようなものを使用できます
<?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;
}
更新:if($posts)
クエリが ID を返すかどうかを確認する条件を追加しました。