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

我正在尝试通过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'

);


// action

function 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 ); 

}

红糖糍粑
浏览 126回答 1
1回答

守着一只汪

我使用您的代码来尝试重新创建您的问题,并遇到了许多问题,但仍能正常工作。在您提供的视频教程的链接上,其操作与示例代码有所不同。我注意到的第一件事是,您正在函数中更改$ 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卧室房屋。
打开App,查看更多内容
随时随地看视频慕课网APP