显示包含或不包含自定义域的帖子

时间:2012-12-05 作者:alekstrust

我试图在作者的页面中显示传统帖子。此页面必须包含包含特定meta_keymeta_value, 如果显示的作者不是WP帖子的作者。

这是我的功能:

function my_pre_get_posts( $query ) {

    if ( is_admin() )
        return;

    if ( $query->is_main_query() ) :

        if ( is_author() ):
            $query->set( \'meta_query\', array(
                \'relation\'      => \'OR\',
                array(
                    \'key\'       => \'writer\',
                    \'value\'     => \'the same author name\'
                ),
                array(
                    \'key\' => \'\',
                    \'value\' => \'\'
                )
            ) );
        endif;

    endif;
}
add_action( \'pre_get_posts\', \'my_pre_get_posts\' );
但乍一看,这是行不通的。

对不起,如果我的英语不好。

1 个回复
最合适的回答,由SO网友:Andy Adams 整理而成

WP\\U查询类将自动AND 设置的任何筛选器。在您的情况下,使用$query->set( \'meta_query\', ... ) 意味着WordPress将查找来自当前作者的帖子(因为这是作者模板)以及具有自定义元键的帖子。根据我对您的问题的理解,这种故意的情况永远不会发生,因此不能以这种方式修改查询。

相反,您需要posts_where 要添加的筛选器OR 至的条件WHERE 条款:

function wp_75068_filter_where( $where ) {
    if ( is_author() ) {
        global $wpdb;

        $co_author_posts = get_posts( array( 
            \'numberposts\' => 99,
            \'meta_key\' => \'writer\',
            \'meta_value\' => \'the same author name\',
            \'fields\' => \'ids\' // fetch only the IDs
        ) );

        if ( ! empty( $co_author_posts ) ) {
            $where .= " OR $wpdb->posts.ID IN (" . implode( ", ", array_map( \'intval\', $co_author_posts ) ) . ") "; 
        }
    }

    return $where;
}

add_filter( \'posts_where\', \'wp_75068_filter_where\' );
代码还没有经过测试,所以如果有任何问题,请告诉我!

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post