【发布时间】:2020-06-03 14:26:49
【问题描述】:
如果我将以下代码(取自 this answer)添加到我的 functions.php,我的默认“每页产品”数量将从 15 变为 10,无论我做什么,我似乎都无法做到改回 15。
我添加的代码如下:
add_action( 'woocommerce_before_shop_loop', 'ps_selectbox', 25 );
function ps_selectbox() {
$per_page = filter_input(INPUT_GET, 'perpage', FILTER_SANITIZE_NUMBER_INT);
echo '<div class="woocommerce-perpage">';
echo '<select onchange="if (this.value) window.location.href=this.value">';
$orderby_options = array(
'15' => '15',
'30' => '30',
'45' => '45',
'-1' => 'All'
);
foreach( $orderby_options as $value => $label ) {
echo "<option ".selected( $per_page, $value )." value='?perpage=$value'>$label</option>";
}
echo '</select>';
echo '</div>';
}
add_action( 'pre_get_posts', 'ps_pre_get_products_query' );
function ps_pre_get_products_query( $query ) {
$per_page = filter_input(INPUT_GET, 'perpage', FILTER_SANITIZE_NUMBER_INT);
if( $query->is_main_query() && !is_admin() && is_post_type_archive( 'product' ) ){
$query->set( 'posts_per_page', $per_page );
}
}
我尝试添加不同的方法来设置每页的默认产品以及上述方法,例如:
add_filter( 'loop_shop_per_page', 'new_loop_shop_per_page', 20 );
function new_loop_shop_per_page( $cols ) {
$cols = 15;
return $cols;
}
和
add_filter( 'loop_shop_per_page', 'lw_loop_shop_per_page', 30 );
function lw_loop_shop_per_page( $products ) {
$products = 15;
return $products;
}
和
add_filter( 'loop_shop_per_page', create_function( '$products', 'return 15;' ), 30 );
等等。但是当我导航到商店页面时,它总是每页显示 10 个产品。 更改每页产品的选项确实有效,但默认值始终是 10,而不是我需要的 15。
我删除添加下拉选择列表的代码后,问题就消失了,它变回了通过定制器设置设置的每页 15 个。
添加下拉选择列表后如何使其保持在每页默认值 15 以进行更改?
【问题讨论】:
-
您确定使用了 ps_pre_get_products_query 吗?尝试删除一些东西然后死();看看有没有用
-
@Berto99 可能不是 - 我使用的答案的原始代码似乎取自这里:pixelstores.com/… 如果这是错误的,应该是什么?
-
很抱歉,我从来没有使用过 woocommerce,我可以帮助您了解 php 或调试您的代码,但我不知道 woocommerce 是如何工作的
-
@Berto99 无需道歉,感谢您的帮助:) 谢谢
标签: php woocommerce