WordPress的 - 当自定义字段等于某事时跳过帖子/页面
问题描述:
我正在写一个插件,但我遇到了问题。当Wordpress在网站上显示帖子&页面时,当自定义字段show_post等于0(这是一个简化示例)时,我希望它跳过该帖子/页面。我该怎么做呢?WordPress的 - 当自定义字段等于某事时跳过帖子/页面
请记住,这是一个插件,而不是一个主题,所以我不能只编辑主题跳过这些帖子/页面。
答
假设您希望插件适用于所有主题和所有查询。
您可以使用类似
<?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或没有。
它不起作用,因为它现在不显示任何帖子或页面。 – 2011-12-23 11:47:35
原因可能是您没有show_posts = 0的任何帖子/页面。更新了代码并为该问题添加了修复程序。 – tamilsweet 2011-12-23 13:39:28
@talimsweet它增加了'和ID不在(418,400)',但它不应该这样做,因为这些帖子有正确的元字段/值。 – 2011-12-23 13:50:26