0

我正在写一个插件,但我有一个问题。当 Wordpress 在网站上显示帖子和页面时,我希望它在自定义字段 show_post 等于 0 时跳过该帖子/页面(这是一个简化的示例)。我该怎么做呢?

请记住,这是一个插件,而不是一个主题,所以我不能只是编辑主题来跳过那些帖子/页面。

4

1 回答 1

1

假设您希望插件适用于所有主题和所有查询。

你可以使用类似的东西

<?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-23T02:02:08.343 回答