为了账号安全,请及时绑定邮箱和手机立即绑定

Wordpress:带过滤器的存档页面不起作用(ACF)

Wordpress:带过滤器的存档页面不起作用(ACF)

PHP
红糖糍粑 2021-04-27 11:22:47
我正在尝试通过ACF的复选框字段来过滤我的自定义帖子类型。我使用本教程:https : //www.advancedcustomfields.com/resources/creating-wp-archive-custom-field-filter/现在,我得到了一个问题,当ich筛选自定义帖子类型的存档页面上的复选框时,什么都不会改变。它仅生成正确的URL,但不过滤帖子。有些人知道为什么吗?function.php:// array of filters (field key => field name)$GLOBALS['my_query_filters'] = array(     'mitglieder'   => 'mitglieder');// actionfunction my_pre_get_posts( $query ) {    // bail early if is in admin    if( is_admin() ) return;    // bail early if not main query    // - allows custom code / plugins to continue working    if( !$query->is_main_query() ) return;    // get meta query    $meta_query = $query->get('meta_query');    // loop over filters    foreach( $GLOBALS['my_query_filters'] as $key => $name ) {        // continue if not found in url        if( empty($_GET[ $name ]) ) {            continue;           }        // get the value for this filter        // eg: http://www.website.com/events?city=melbourne,sydney        $value = explode(',', $_GET[ $name ]);        // append meta query        $meta_query = array(            array(                'key'       => $name,                'value'     => $value,                'compare'   => 'IN',            )        );    }     // update meta query    $query->set('meta_query', $meta_query ); }
查看完整描述

1 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

我使用您的代码来尝试重新创建您的问题,并遇到了许多问题,但仍能正常工作。在您提供的视频教程的链接上,其操作与示例代码有所不同。


我注意到的第一件事是,您正在函数中更改$ query,然后在archive-projekte.php中重新定义它。


$args = array(

      'post_type' => 'projekte',

      'post_status' => 'publish',

      'posts_per_page' => '-1'

);

$the_query = new WP_Query( $args );


if ( $the_query->have_posts() ) : 

   while ( $the_query->have_posts() ) : 

      //......

   endwhile; 

endif;


wp_reset_query();

您可以只使用标准循环的版本


if ( have_posts() ) {  

   while ( have_posts() ) {

      the_post();         

      //.......

   }

}

其次,当我在Wordpress admin中将高级自定义字段(mitglieder)设置为复选框时,然后由过滤器div中的create_field()呈现为前端的复选框,但问题是该复选框以如下形式保存在元数据中:序列化的数据,所以它不起作用,所以我将高级自定义字段更改为单选按钮,一切正常。


由此产生的新问题是过滤器div现在具有单选按钮。因此,我在$ field上使用了foreach循环而不是create_field来观看视频教程和输出复选框,这意味着还需要更改javascript。


现在唯一的问题仍然是,如果您需要将高级自定义字段选中,以便您的项目中的一个帖子具有多个mitglieder值,那么您将需要使用序列化的元数据来使过滤器正常工作。


这类似于使用房屋和卧室的ACF示例视频,在这种情况下,房屋不能同时是2卧室房屋和3卧室房屋。


查看完整回答
反对 回复 2021-05-07
  • 1 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信