ADD_QUERY_ARG用于比较和显示特定日期的事件

时间:2015-02-15 作者:ronimarin

我有archive-events.php 使用日期格式为YYYYMMDD(20150215)的自定义字段,通过WP\\U查询对自定义帖子类型“事件”进行排序的文件,如下所示:

$args = array(
    \'post_type\'     => \'events\',
    \'posts_per_page\'=> 10,
    \'meta_key\'      => \'wpcf-sort-events\',
    \'orderby\'       => \'meta_value_num\',
    \'order\'         => \'ASC\'
);
$wp_query = new WP_Query( $args );
然后我制作了一个小部件,它显示带有日期链接的自定义日历,通过add_query_arg 并显示从该日期起存档的事件,如下所示:

$day = I get the day for the calendar before this... 01
$date = I get the full date (Ymd 20150501) from calendar widget to compare
$arrayargs = array(
    \'meta_query\' => array(
         \'key\'        => \'wpcf-sort-events\',
         \'value\'      => $date,
         \'compare\'    => \'>=\'
         ),
     );                                                                                                                                                         

$output = \'<a href="\' . add_query_arg( $arrayargs ) . \'>\' . $day . \'</a> \';
这将创建如下链接:http://mediterranean.life/events/?meta_query%5Bkey%5D=wpcf-sort-events&meta_query%5Bvalue%5D=20150501&meta_query%5Bcompare%5D=%3E

但我知道all 事件(无论自定义日期)排序ASC类查询archive-events.php, 它忽略了meta_query 通过链接。。。

我尝试过用这样的完整查询创建链接,但也失败了。。。

$arrayargs = array(
            \'post_type\' => \'events\',
            \'meta_key\' => \'wpcf-sort-events\',
            \'meta_query\' => array(
                \'key\' => \'wpcf-sort-events\',
                \'value\' => $date,
                \'compare\' => \'>=\'
                ),
            \'orderby\' => \'meta_value_num\',
            \'order\' => \'ASC\'
        );                                                                                                                                                          

        $output = \'<a href="\' . add_query_arg( $arrayargs ). \'>\' . $day . \'</a> \';
迷失在太空中。。。有什么想法吗?

1 个回复
SO网友:cybmeta

正如您在自定义WP\\u查询中所看到的,您传递的是硬编码的aguments,而不是计算URL中传递的参数,因此它们不会影响结果。

在您的情况下,似乎对归档模板使用自定义查询是一种不好的方式。当您请求存档模板时,存档的事件已被查询,您将拒绝结果并进行新的二次查询。相反,您应该使用pre_get_posts 操作挂钩,在执行主查询之前对其进行更改,以便在存档模板中获得所需的事件,而无需辅助模板。

add_action( \'pre_get_posts\', function( $query) {

   if(isset($query->query_vars[\'action\']) && $query->query_vars[\'action\'] == \'search\'){

       //Check that is the main query, not secondary, that we are not in admin side
       //and check that $query is the for the events archive

       if($query->is_main_query() && !is_admin() && is_post_type_archive(\'events\') ) {

           //Get the values passed in the URL and pass them to the query
           if( ! empty( $_GET[\'meta_query\'] ) ) {
               //You may need some validation/sanitization in $_GET[\'meta_query\'] befor use it
               $query->set( \'meta_query\', $_GET[\'meta_query\'] );
           }


       }

   }


} );

结束

相关推荐

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

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