Custom Order in WP Query

时间:2012-11-26 作者:Horttcore

我正在尝试实现我自己的查询排序,下面是我想到的。。。

$query = new WP_Query(\'post_type=contentboxes&include=\' . $contentboxes . \'&order=ASC&orderby=include\' );
我的自定义循环,$contentbox类似于带有orderby include参数的34,45,23,46。

为了实现自定义订单,我使用*pre\\u get\\u posts*和*posts\\u orderby*过滤器。

function pre_get_posts( $query )
{
    if ( \'include\' == $query->query_vars[\'orderby\'] ) :
        global $order_by_include;
        $order_by_include = TRUE;
    endif;
}
*$order\\u by\\u include*是一个空变量,在使用自定义排序时创建。

function posts_orderby( $orderby )
{
    if ( !isset( $order_by_include ) )
        return $orderby;

    global $wpdb, $contentbox_order;

    unset( $order_by_include );
    return "FIND_IN_SET(" . $wpdb->posts . ".ID, \'" . $wp_query->query_vars[\'include\'] . "\') " . $wp_query->query_vars[\'order\'];
}
在posts\\U orderby过滤器中,如果设置了变量,我会将当前订单覆盖为自定义订单。之后,我取消设置变量以保持全局范围干净,并且不改变任何其他循环。

这是我现在的问题,我不喜欢使用全局变量来实现这个特性,我认为这有点脏,但确实可以。

我试图从posts\\u orderby中的自定义查询中获取查询变量,但我的自定义查询除外。

有没有更干净的方法?

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

Chain 过滤器:

if ( \'include\' == $query->query_vars[\'orderby\'] )
    add_filter( \'posts_orderby\', /* … */ );
在orderby筛选器中使用:

remove_filter( current_filter(), __FUNCTION__ );

结束

相关推荐

Show Posts to Author Only

我已经在WordPress中为我的一个网站开发了发票系统。我使用了自定义的帖子类型和自定义的元字段,集成的支付网关来满足我的需要。用户一般生成发票上传资金。我使用了来自前端的post提交,以便用户可以自己创建发票。一切都运行顺利,但用户创建的一张发票对其他用户可见。例如,创建的发票,id:APL-2012110489586。用户B可以通过键入domin访问发票。com?发票=APL-2012110489586。现在我想限制其他用户访问发票。只有管理员和发票创建者才能访问发票。所有用户都是订户角色。需要您的