Pre_Get_Posts或分类与作者之间的关系

时间:2011-11-29 作者:v0idless

我有一个自定义分类法叫做coauthor. 在edit.php 屏幕上,我正在尝试筛选并仅显示当前用户编写的帖子OR 由当前用户共同撰写的帖子。我可以拿到帖子authored 当前用户:

function get_authored_posts($query) {
    global $user_ID;
    $query->set(\'author\',  $user_ID);
    return $query;
}
add_filter(\'pre_get_posts\', \'get_authored_posts\');
我也可以得到帖子coauthored 当前用户:

function get_coauthored_posts($query) {
    global $user_ID;
    $user = get_userdata($user_ID);
    $query->set(\'taxonomy\', \'coauthor\');
    $query->set(\'term\', $user->user_login);
    return $query;
}
add_filter(\'pre_get_posts\', \'get_coauthored_posts\');
我相信结果会产生作者的帖子AND 由当前用户共同编写。我正在寻找作者的帖子OR 由当前用户共同编写。我希望第一次和第二次的结果都能显示出来。

注:为了澄清,合著者作为术语存储在coauthor 分类学术语是user\\u登录值。

==编辑==

我目前将作者存储为合著者。我觉得这是一个更好的解决方案的“变通方法”。如何/可以使用直接查询(忽略WP\\u查询对象)并从pre\\u get\\u posts筛选器返回该查询?

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

当我为一家需要多个作者的公司实现类似的东西时,我们对作者分类法也做了类似的事情。但在这种情况下,我们根本没有使用原始作者字段。

基本上,不可能使用标准方法创建author=X或coauthor=Y的标准WP\\u查询。您必须求助于直接的SQL篡改,这是有问题的,并且容易发生意外破坏。

但是,只使用合著者分类法,非常简单地创建一个在(X,Y)中有合著者的tax\\u查询是相当简单的。

所以不,这不是一个真正的解决方法,它实际上是最好的方法。posts表完全面向单个作者。如果您需要多个作者,那么在post\\u author字段中特别加上其中一个作者实际上是真正的WTF,因为为什么要麻烦呢?更明智的做法是使用分类法,并允许完全多连接的合著者系统。

SO网友:ZweiBlumen

我不确定您是否可以轻松地向$query对象添加或查询。

在查询元信息时,这似乎是可能的,例如:

 $args = array(
    \'post_type\' => \'product\',
    \'meta_query\' => array(
        \'relation\' => \'OR\',
        array(
            \'key\' => \'color\',
            \'value\' => \'blue\',
            \'compare\' => \'NOT LIKE\'
        ),
        array(
            \'key\' => \'price\',
            \'value\' => array( 20, 100 ),
            \'type\' => \'numeric\',
            \'compare\' => \'BETWEEN\'
        )
    )
  );
 $query = new WP_Query( $args );
请注意“relation”参数。这是从本法典页的底部开始的:http://codex.wordpress.org/Class_Reference/WP_Query

另一种选择是将作者存储为合著者。

结束

相关推荐