我每页都有woocommerce产品下拉列表。它可以正常工作,但是当应用于搜索结果时,它会中断,并且我使用relevanssi进行搜索,这是我在functions.php中下拉/选择的代码:-
add_action('woocommerce_before_shop_loop','my_select',25);
function my_select(){
$per_page = filter_input(INPUT_GET,'perpage',FILTER_SANITIZE_NUMBER_INT);
echo "<form class='woocommerce-perpage' method='get'><span>Products per Page:</span>";
echo "<select onchange='this.form.submit()' name='ga_select_ppp'>";
$orderby_options = array(''=>'','40'=>'40','60'=>'60');
foreach($orderby_options as $key=>$value){
echo "<option value='$value'>$value</option>";
}
echo "</select></form>";
}
add_action('pre_get_posts','ga_pre_get_products_query');
function ga_pre_get_products_query($query){
$per_page = filter_input(INPUT_GET,'ga_select_ppp',FILTER_SANITIZE_NUMBER_INT);
global $wp_query;
if($query->is_main_query() && !is_admin() ){
$query->set('posts_per_page',$per_page);
}
}
这非常适合URL中不包含搜索参数的任何内容。例如,在此页面URL中,单击下拉60页而不是example.com/?s=test&post_type=product&ga_select_ppp=60下拉菜单中的example.com/?s=test&post_type=product,它将转到此URL example.com/?。 ga_select_ppp = 60,每页不显示60个产品。那么,需要使用哪些相关的钩子和相关性过滤器?如何使用?
答案 0 :(得分:0)
该表单仅发送ga_select_ppp
参数,而没有发送其他任何内容。这就是为什么未传递s
和post_type
参数的原因。
将my_select()
函数更改为此应该会更好:
function my_select(){
$s = filter_input(INPUT_GET,'s',FILTER_SANITIZE_STRING);
$post_type = filter_input(INPUT_GET,'post_type',FILTER_SANITIZE_STRING);
echo "<form class='woocommerce-perpage' method='get'><span>Products per Page:</span>";
if ($s) {
echo "<input type='hidden' name='s' value='$s' />";
}
if ($post_type) {
echo "<input type='hidden' name='post_type' value='$post_type' />";
}
echo "<select onchange='this.form.submit()' name='ga_select_ppp'>";
$orderby_options = array(''=>'','40'=>'40','60'=>'60');
foreach($orderby_options as $key=>$value){
echo "<option value='$value'>$value</option>";
}
echo "</select></form>";
}
此外,您可以简化一下–至少对于搜索,如果您仅将pre_get_posts
输入命名为ga_select_ppp
,则根本不需要posts_per_page
过滤器。 Relevanssi非常了解http://www.example.com/?s=test&post_type=product&posts_per_page=60
。