如果我将以下代码(取自this answer)添加到public function getCasts()
{
if ($this->getIncrementing()) {
return array_merge([$this->getKeyName() => $this->getKeyType()], $this->casts);
}
return $this->casts;
}
,则我的默认“每页产品数”从15变为10,无论我做什么我都看不到使其变回15。
我要添加的代码如下:
functions.php
我尝试添加不同的方法来设置每页默认商品以及上面的商品,例如:
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;
}
等但是,当我导航至商店页面时,每页始终显示10种产品。 可以更改每页产品的选项确实有效,但是默认值始终是10,而不是我需要的15。
我删除添加下拉列表的代码后,问题就消失了,它又变回了每页15个,这是通过Customizer设置设置的。
添加下拉选择列表以进行更改后,如何使它默认保持在每页15个?
答案 0 :(得分:0)
我通过释放以下功能来解决此问题:如果未使用/尚未设置下拉菜单,则该功能不适合初始加载,因此我将其更改如下:
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 ($per_page) // <---- this is what I added
if( $query->is_main_query() && !is_admin() && is_post_type_archive( 'product' ) ){
$query->set( 'posts_per_page', $per_page );
}
}
现在它每页加载正确的默认产品