正在尝试修复多个类别下拉列表

Trying to fix multiple category drop down

本文关键字:下拉列表      更新时间:2023-09-26

我在试图修复我正在开发的网站上的类别下拉列表时遇到了一些问题。基本上,一个下拉式过滤器有"按位置排序",第二个是"按价格排序"。第一个过滤器工作正常,即"按位置分类",但第二个过滤器没有。它正在加载所有的帖子,并且没有正确过滤。

这是链接-

http://digitalspin.ph/federalland/?page_id=23

这是我的代码

HTML-

<div class="filter_container">
        <?php wp_dropdown_categories( $args_cat1 ); ?> 
</div>
<div class="filter_container">
        <?php wp_dropdown_categories( $args_cat2 ); ?> 
</div>

JS-

<!--DROPDOWN SORT CATEGORY 1 -->
<script type="text/javascript">
var dropdown = document.getElementById("cat1");
function onCatChange() {
    if ( dropdown.options[dropdown.selectedIndex].value > 0 ) {
        location.href = "<?php echo get_option('home');
?>/?cat="+dropdown.options[dropdown.selectedIndex].value;
    }
}
dropdown.onchange = onCatChange;
</script>

<!--DROPDOWN SORT CATEGORY 2-->
<script type="text/javascript">
var dropdown = document.getElementById("cat2");
function onCatChange() {
    if ( dropdown.options[dropdown.selectedIndex].value > 0 ) {
        location.href = "<?php echo get_option('home');
?>/?cat="+dropdown.options[dropdown.selectedIndex].value;
    }
}
dropdown.onchange = onCatChange;
</script>

Functions.php

//LOCATION FILTER
$args_cat2 = array(
'show_option_all'    => '',
'show_option_none'   => '',
'orderby'            => 'ID', 
'order'              => 'ASC',
'show_count'         => 0,
'hide_empty'         => 1, 
'child_of'           => 0,
'exclude'            => '1,2,3,4,32,33,34,35,36,37',
'echo'               => 1,
'selected'           => 0,
'hierarchical'       => 0, 
'name'               => 'cat2',
'id'                 => 'cat2',
'class'              => 'postform',
'depth'              => 0,
'tab_index'          => 0,
'taxonomy'           => 'category',
'hide_if_empty'      => false,
'walker'             => ''
);
//PRICE FILTER
$args_cat1 = array(
'show_option_all'    => '',
'show_option_none'   => '',
'orderby'            => 'ID', 
'order'              => 'ASC',
'show_count'         => 0,
'hide_empty'         => 1, 
'child_of'           => 0,
'exclude'            => '1,2,3,4,23,24,25,26,27,28,29,30,31',
'echo'               => 1,
'selected'           => 0,
'hierarchical'       => 0, 
'name'               => 'cat1',
'id'                 => 'cat1',
'class'              => 'postform',
'depth'              => 0,
'tab_index'          => 0,
'taxonomy'           => 'category',
'hide_if_empty'      => false,
'walker'             => ''
);

以下是来自firebug-的javascript错误

TypeError: dropdown is null
dropdown.onchange = onCatChange;

每当我在"按价格排序"中选择一个类别时,它就会显示"按位置排序"中的所有帖子,即类别ID 23

主要问题是您认为您的2个java脚本是在不同的上下文中执行的,但事实并非如此。它们在相同的上下文中执行,因此

<script type="text/javascript">
var dropdown = document.getElementById("cat1");
function onCatChange() {
    if ( dropdown.options[dropdown.selectedIndex].value > 0 ) {
        location.href = "<?php echo get_option('home');?>/?cat="+dropdown.options[dropdown.selectedIndex].value;
    }
}
dropdown.onchange = onCatChange;
var dropdown = document.getElementById("cat2");
function onCatChange() {
    if ( dropdown.options[dropdown.selectedIndex].value > 0 ) {
        location.href = "<?php echo get_option('home');?>/?cat="+dropdown.options[dropdown.selectedIndex].value;
    }
}
dropdown.onchange = onCatChange;
</script>

会产生完全相同的结果。你需要更改一些变量和函数的名称,这样它们就不会发生冲突或做类似的事情:

document.getElementById("cat1").onChange = function(){
    if ( this.options[this.selectedIndex].value > 0 ) {
        location.href = "<?php echo get_option('home');?>/?cat="+this.options[this.selectedIndex].value;
    }
}
document.getElementById("cat2").onChange = function(){
    if ( this.options[this.selectedIndex].value > 0 ) {
        location.href = "<?php echo get_option('home');?>/?cat="+this.options[this.selectedIndex].value;
    }
}

或者更好的

var catChanger = function(){
    if ( this.options[this.selectedIndex].value > 0 ) {
        location.href = "<?php echo get_option('home');?>/?cat="+this.options[this.selectedIndex].value;
    }
}
document.getElementById("cat1").onChange = catChanger;    
document.getElementById("cat2").onChange = catChanger;