使用parse_Query过滤器修改主WordPress循环

时间:2011-03-29 作者:Sarah Neuber

我正在尝试修改分类页面上的主要WordPress循环,如下所示:

add_filter(\'parse_query\', \'my_modified_query\');

function my_modified_query( $q ) {
       if (!is_admin() && is_category()) {
              $q->set( \'orderby\', \'meta_value\' );
              $q->set( \'meta_key\', \'my_key\' );
       }

       return $q;
}
但它似乎不起作用。

但是,修改其他内容,如:

 $q->set( \'order\',\'title\' );
 $q->set( \'orderby\', \'DESC\');
工作正常。只是没有

$q->set( \'orderby\', \'meta_value\' );
$q->set( \'meta_key\', \'my_key\' );
知道为什么吗?

3 个回复
SO网友:t31os

最终,所有的元查询都可以运行_get_meta_sql.

以下密码语句用于任何元查询。

if ( empty( $meta_key ) && empty( $meta_value ) )
    continue;
这里有一张罚单,上面列出了我们应该做什么
http://core.trac.wordpress.org/ticket/16735

然而,您可以做的是有目的地将查询传递给meta_value 您的帖子可能永远不会使用!= (不等于)比较,从技术上讲,这会让你得到正确的职位,例如。。

$q->set( \'meta_key\', \'my_key\' );
$q->set( \'meta_value\', \'WPSE_RULES!\' );
$q->set( \'meta_compare\', \'!=\' );
$q->set( \'orderby\', \'meta_value\' );
不过还有一件事,你以前把这些都搞错了。。

$q->set( \'order\',\'title\' );
$q->set( \'orderby\', \'DESC\');
  • order 设置结果排序的方向,有效值为ascdesc (大写或小写)。

  • orderby 设置结果的顺序,例如日期、标题、元值等。。

    我没有提到现在有一种新的基于meta的帖子查询方法,使用meta_query 参数,但这并不能避免我上面提到的问题,旧的元参数仍然(最终)被转换为meta_query 无论如何,我只提供一些示例的链接。

    http://scribu.net/wordpress/advanced-metadata-queries.html

    希望一切都有帮助:)

SO网友:Razvan Dvl

您可能已经得到了解决方案,因为自发布以来,它已经过去了将近一年。几个小时前,我也有同样的问题,直到我发现我在使用数字——所以我使用了meta_value_num 代替meta_value.

SO网友:kaiser

Servus Sarah。我想这是你的envato商店主题之一?您是否已尝试这样打印查询(返回前):echo \'<pre>\'; print_r($q); echo \'</pre>\';.

我猜你是在一个主题函数中添加这个。php?

$q->set( \'oderby\', \'DESC\' ); 有效,但$q->set( \'oderby\', \'meta_value\' ); 不尝试使用两个由空格分隔的基本orderby参数来检查默认行为是否适用。如果是,您可能会遇到一些拼写错误。除了“my\\u key”之外的其他值是否适用于“meta\\u key”?如果没有,则可能缺少“meta\\u value”参数。这个不太确定,但看看这个:http://codex.wordpress.org/Function_Reference/WP_Query#Parameters 或者更好地直接查看核心文件中的函数。

结束

相关推荐

Paging in a sidebar mini loop

我切换到了另一个主题,并决定用其中的一些默认代码制作一个小部件,在自定义循环中显示我的美味帖子、推特帖子、su帖子和youtube视频(不包括主循环中的这些类别)。但是现在。。。分页不再工作。我制作了这个小部件:// =============================== EDL Sidebar Posts Widget ====================================== class SidebarPosts extends WP_Widget { &#x