Delist entries in the_loop

时间:2012-05-22 作者:getWeberForStackExchange

我正在尝试向我的WordPress网络添加一个退市功能。被除名的帖子不会出现在帖子列表中,但如果直接访问,仍然可以看到。

我编写了一个插件,帮助编辑在作者和帖子上删除带有自定义元值的条目。因此,在公开列表中显示每篇文章之前,我需要检查两个元数据:delist-post post 元价值和delist-author user 元值。

我想注册一个pre_get_posts 限制返回的筛选器get_posts() 通过设置查询的meta_query 所有物是否可以使用POST检查用户元值meta_query? 如果没有,您能想出一种更好的方法来做到这一点,而不在主题文件中添加条件语句(即不if (!get_post_meta(...) && !get_user_meta(...)) 在里面the_loop)?

3 个回复
最合适的回答,由SO网友:getWeberForStackExchange 整理而成

在写下我的问题后不久,Theme Foundry写道a blog entry 这回答了我的问题。解决方案是add_action都是sposts_joinposts_where. 每一个都将子句作为参数,您可以使用自己的条件附加这些子句并返回附加的子句。

就我而言,我只需要限制joinposts_join 回调:

$join .= " 
            LEFT JOIN    " . $wpdb->postmeta . " AS pm 
            ON           (" . $wpdb->posts . ".ID = pm.post_id AND 
                        pm.meta_key = \'post_meta_key_here\') 
            LEFT JOIN    " . $wpdb->usermeta . " AS um 
            ON           (" . $wpdb->posts . ".post_author = um.user_id AND 
                        um.meta_key = \'author_meta_key_here\') "
。。。以及where 中的条款posts_where 回调。。。

$where .= " 
                AND ((pm.meta_key = \'post_meta_key_here\' AND pm.meta_value = 0)
                    OR pm.meta_id IS NULL) 
                AND ((um.meta_key = \'author_meta_key_here\' AND um.meta_value = 0)
                    OR um.umeta_id IS NULL) ";
请参见the blog post 了解更多信息。

SO网友:mor7ifer

如果您正在使用WP_Query 要进行循环,只需获取所有帖子ID,然后在p 参数

例如:

$unwanted_posts = array(); // you must generate this
$unwanted_posts_str = \'-\'.implode( \',-\', $unwanted_posts );

$args = array(
    \'p\' => $unwanted_posts_str
);
您还可以使用set() 方法

SO网友:Chip Bennett

我会使用pre_get_posts:

<?php
function wpse52961_filter_delisted_posts( $query ) {
    // Only modify the main query
    // NOTE: You\'ll need to change this if
    // you intend to target a specific secondary query
    if ( $query->is_main_query() ) {
        // Define meta query
        $filtered_posts_meta_query = array(
            \'relation\' => \'OR\',
            array(
                \'meta_key\' => \'delist-post\',
                \'meta_value\' => true
            ),
            array(
                \'meta_key\' => \'delist-author\',
                \'meta_value\' => true
            )

        );
        // Add the meta query args to the query
        $query->set( \'meta_query\', $filtered_posts_meta_query );
    }
}
add_action( \'pre_get_posts\', \'wpse52961_filter_delisted_posts\' );
?>
我对元键值和delist-postdelist-author.

结束

相关推荐

Thesis Theme Custom Loop

我正在使用论文主题构建一个网站,并使用论文自定义循环API和自定义WP\\U查询。当我在单页上执行此操作时,它不会显示评论表单。如何在单个帖子页面上添加评论表单