使用ACF过滤时,类别页面中的顶级菜单消失

时间:2014-03-11 作者:user3137901

我正在使用ACF(高级自定义字段)并使用他们在网站上发布的方法过滤结果。

http://www.advancedcustomfields.com/resources/tutorials/creating-wp-archive-custom-field-filter/

过滤工作正常,但显示结果时,顶部菜单消失。我使用的代码如下:

在函数中。php add\\u action(\'pre\\u get\\u posts\',\'my\\u pre\\u get\\u posts\');

函数my\\u pre\\u get\\u posts($query){//验证if(is\\u admin()){返回;}

// get original meta query
$meta_query = $query->get(\'meta_query\');

    // allow the url to alter the query
    // eg: http://www.website.com/events?location=melbourne
    // eg: http://www.website.com/events?location=sydney
    if( !empty($_GET[\'bedrooms\']) )
    {
        $bedrooms = explode(\',\', $_GET[\'bedrooms\']);

        //Add our meta query to the original meta queries
        $meta_query[] = array(
            \'key\'       => \'bedrooms\',
            \'value\'     => $bedrooms,
            \'compare\'   => \'IN\',
        );
    }

// update the meta query args
$query->set(\'meta_query\', $meta_query);

// always return
return; 
}
在类别中。php

    <div id="search-houses">
    <?php 

    $field = get_field_object(\'bedrooms\');
    $values = explode(\',\', $_GET[\'bedrooms\']);

    ?>
    <ul>
        <?php foreach( $field[\'choices\'] as $choice_value => $choice_label ): ?>
            <li>
                <input type="checkbox" value="<?php echo $choice_value; ?>" <?php if( in_array($choice_value, $values) ): ?>checked="checked"<?php endif; ?> /> <?php echo $choice_label; ?></li>
            </li>
        <?php endforeach; ?>
    </ul>
</div>
<script type="text/javascript">
(function($) {

    $(\'#search-houses\').on(\'change\', \'input[type="checkbox"]\', function(){

        // vars
        var $ul = $(this).closest(\'ul\'),
            vals = [];

        $ul.find(\'input:checked\').each(function(){

            vals.push( $(this).val() );

        });

        vals = vals.join(",");

        window.location.replace(location.pathname + \'?bedrooms=\' + vals);

        console.log( vals );

    });

})(jQuery); 
</script>
演示:http://thepursesociety.com/_web/category/houses

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

从…起pre_get_posts in Codex:

Identifying Target Queries

使用pre\\u get\\u posts时,请注意您正在更改的查询。一个有用的函数是is\\u main\\u query(),它可以帮助您确保要修改的查询只是主查询。将其与其他条件标记结合使用,仅更改所需页面上的主查询。

pre_get_posts 对页面上的每个查询执行,其中包括加载菜单项的查询,因此您需要检查$query->is_main_query() 在修改之前,否则将对其他查询应用查询修改。

结束

相关推荐

Php如何使用wp_Query仅在当前分类中显示POST?

很难得到我的分类法。php运行良好。我使用分类法。php来列出我在特定类别中的所有帖子,但它显示了我在所有类别中的所有帖子。这是我的代码:<ul class=\"scenes cf\"> <?php $args1 = array( \'post_type\'=>\'artistes\', \'orderby\' => \'menu_order\', \'order\' => \'ASC\',

使用ACF过滤时,类别页面中的顶级菜单消失 - 小码农CODE - 行之有效找到问题解决它

使用ACF过滤时,类别页面中的顶级菜单消失

时间:2014-03-11 作者:user3137901

我正在使用ACF(高级自定义字段)并使用他们在网站上发布的方法过滤结果。

http://www.advancedcustomfields.com/resources/tutorials/creating-wp-archive-custom-field-filter/

过滤工作正常,但显示结果时,顶部菜单消失。我使用的代码如下:

在函数中。php add\\u action(\'pre\\u get\\u posts\',\'my\\u pre\\u get\\u posts\');

函数my\\u pre\\u get\\u posts($query){//验证if(is\\u admin()){返回;}

// get original meta query
$meta_query = $query->get(\'meta_query\');

    // allow the url to alter the query
    // eg: http://www.website.com/events?location=melbourne
    // eg: http://www.website.com/events?location=sydney
    if( !empty($_GET[\'bedrooms\']) )
    {
        $bedrooms = explode(\',\', $_GET[\'bedrooms\']);

        //Add our meta query to the original meta queries
        $meta_query[] = array(
            \'key\'       => \'bedrooms\',
            \'value\'     => $bedrooms,
            \'compare\'   => \'IN\',
        );
    }

// update the meta query args
$query->set(\'meta_query\', $meta_query);

// always return
return; 
}
在类别中。php

    <div id="search-houses">
    <?php 

    $field = get_field_object(\'bedrooms\');
    $values = explode(\',\', $_GET[\'bedrooms\']);

    ?>
    <ul>
        <?php foreach( $field[\'choices\'] as $choice_value => $choice_label ): ?>
            <li>
                <input type="checkbox" value="<?php echo $choice_value; ?>" <?php if( in_array($choice_value, $values) ): ?>checked="checked"<?php endif; ?> /> <?php echo $choice_label; ?></li>
            </li>
        <?php endforeach; ?>
    </ul>
</div>
<script type="text/javascript">
(function($) {

    $(\'#search-houses\').on(\'change\', \'input[type="checkbox"]\', function(){

        // vars
        var $ul = $(this).closest(\'ul\'),
            vals = [];

        $ul.find(\'input:checked\').each(function(){

            vals.push( $(this).val() );

        });

        vals = vals.join(",");

        window.location.replace(location.pathname + \'?bedrooms=\' + vals);

        console.log( vals );

    });

})(jQuery); 
</script>
演示:http://thepursesociety.com/_web/category/houses

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

从…起pre_get_posts in Codex:

Identifying Target Queries

使用pre\\u get\\u posts时,请注意您正在更改的查询。一个有用的函数是is\\u main\\u query(),它可以帮助您确保要修改的查询只是主查询。将其与其他条件标记结合使用,仅更改所需页面上的主查询。

pre_get_posts 对页面上的每个查询执行,其中包括加载菜单项的查询,因此您需要检查$query->is_main_query() 在修改之前,否则将对其他查询应用查询修改。

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请