我一直在研究这个示例:http://www.advancedcustomfields.com/resources/creating-wp-archive-custom-field-filter/
我的一位同事发现,它为Wordpress自定义帖子创建了一个简单的基于复选框的过滤器,该过滤器按自定义帖子类型进行过滤。
我已经做好了所有的准备,它似乎在这里工作-,如果你按“地点”过滤,那么“所有地点”的帖子就会像你预期的那样被删除。
但是,如果您选择了一个不存在的选项,则刷新时过滤器会消失,我不知道为什么。我的同事在另一个没有这个问题的网站上使用了这个代码,所以我很困惑。我尝试过重新排序模板中的元素,以防有什么东西影响它,但似乎什么都没有改变。
存档作业中的代码。php:
<div class="filterOptions">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nisl odio, efficitur non lorem ut, volutpat egestas tellus. Vestibulum suscipit sem mi, nec mattis tortor convallis in. Integer in blandit turpis, consectetur tincidunt dolor.</p>
<div id="search-location">
<?php
$field = get_field_object(\'location_choice\');
$values = explode(\',\', $_GET[\'location_choice\']);
?>
<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-location\').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(\'<?php echo home_url(\'jobs\'); ?>?location_choice=\' + vals);
console.log( vals );
});
})(jQuery);
</script>
</div>
来自函数的代码。php:
add_action(\'pre_get_posts\', \'my_pre_get_posts\');
function my_pre_get_posts( $query )
{
// validate
if( is_admin() )
{
return;
}
if( !$query->is_main_query() )
{
return;
}
// 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[\'location_choice\']) )
{
$location_choice = explode(\',\', $_GET[\'location_choice\']);
//Add our meta query to the original meta queries
$meta_query[] = array(
\'key\' => \'location_choice\',
\'value\' => $location_choice,
\'compare\' => \'IN\',
);
}
// update the meta query args
$query->set(\'meta_query\', $meta_query);
// always return
return;
}
任何帮助都将不胜感激!