无法识别按自定义字段日期排序

时间:2013-06-18 作者:user1576978

好的,我有这个自定义字段wpcf-evento-data-inicio1 使用(很棒的)类型插件生成
这就是它在db上的存储方式:
1372896000
好的,我想按这个值排序。我是通过url参数来做的,我无法发现哪里出了问题。。。我目前正在这样做:

mysyte.com/?post_type=evento&order=desc&orderby=meta_value_num&meta_key=wpcf-evento-data-inicio1
我也尝试过使用meta\\u value而不是meta\\u value\\u num

mysyte.com/?post_type=evento&order=desc&orderby=meta_value&meta_key=wpcf-evento-data-inicio1
它的输出顺序如下:

我看不出有什么不对,有什么想法吗?非常感谢你。

(编辑:请注意这是一个归档模板(archive evento.php)

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

我找不到meta_key 要通过的参数GET 字符串。我测试的许多其他参数都通过了测试,虽然我没有进行详尽的测试,但meta_key 没有。

如果要验证,只需将以下内容添加到header.php 并检查查询。

echo \'<pre>\'; 
var_dump($wp_query); die;
echo \'</pre>\';
我以前从未尝试过传递该参数,但是checking the Codex (谢谢@birgire),我明白了meta_key 作为“私有”变量列出。您不能通过URL传递私有变量,即使直接传递给的参数有效WP_Query 通过硬编码PHP。

你所尝试的,似乎是故意不允许的。您只能使用列为“Public”的参数通过URL修改查询。其他参数将被忽略,通过如上所述检查查询可以看到。

除此之外,当我看到像这样的“排序”问题时,我首先怀疑的是粘性帖子。如果您使用WP_Query 我建议您直接添加&ignore_sticky_posts=true 但我不能让它通过GET 任何一个

然而,如果您确实必须这样做,您应该能够通过打开过滤器来强制完成此操作pre_get_posts.

function order_by_meta($qry) {
  if (isset($_GET[\'meta_key\']) && $_GET[\'meta_key\'] == \'wpcf-evento-data-inicio1\') {
    $qry->set(\'meta_key\',\'wpcf-evento-data-inicio1\');
  }
}
add_action(\'pre_get_posts\',\'order_by_meta\');

结束

相关推荐

使用Pre Get帖子添加多个Orderby

我已经在使用一个小代码来设置默认的排序方式,一个名为“Year”的自定义字段。我需要添加另一个排序方式,以便在相同的排序中也按“Post Title”排序。Sort = 年份自定义字段(DESC)和职位名称(ASC)下面是我当前用于按年份DESC排序的代码。add_filter(\'pre_get_posts\', \'sort_arc\'); function sort_arc($q) { if ($q->is_category) { $q->set(\'or