自定义页面上的下拉菜单,带有产品以选择每页的产品数量

时间:2019-03-25 作者:Jordan

我对Wordpress、Wocoommerce核心和api几乎一无所知,所以请耐心等待。

我在自定义页面(例如,不是woocommerce的默认店铺页面)上显示了约140种产品WooCommerce Product Filter.

产品在页面上,除了无法显示下拉列表外,一切都很好Products per page 我可以选择在页面上显示多少产品。

所以,我找到了一些教程,目前我的function.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 \'<span>Per Page: </span>\';
    echo \'<select onchange="if (this.value) window.location.href=this.value">\';   
    $orderby_options = array( \'8\' => \'8\', \'16\' => \'16\',\'32\' => \'32\',\'64\' => \'64\' );
    foreach( $orderby_options as $value => $label ) {
        echo "<option ".selected( $per_page, $value )." value=\'?perpage=$value\'>$label</option>";
    }
    echo \'</select>\';
}
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_page() ) {
        $query->set( \'posts_per_page\', $per_page );
    }
}

function render_ps_sel() {
    return ps_selectbox();
}
add_shortcode( \'ps_selectbox\', \'render_ps_sel\' );
我正在通过上面的短代码呈现下拉菜单[ps_selectbox] 但无论我选择什么,页面上的产品数量总是一样的,没有任何变化。

1 个回复
SO网友:Antti Koskinen

也许这样行吗?

function ps_pre_get_products_query( $query ) {
    $per_page = filter_input(INPUT_GET, \'perpage\', FILTER_SANITIZE_NUMBER_INT);

    if ( ! is_admin() && is_woocommerce() && is_page() ) {
      $query->set( \'posts_per_page\', $per_page );
    }
}
我测试了您的代码,但if语句似乎无法使用is_page() (但这也可能是因为我当地的WP沙箱一团糟)。据我所知posts_per_page 期望intvar_dump 表明$per_page 是字符串

EDIT 我当地的WP沙箱一团糟,这就是为什么is_page 不起作用。我在另一次安装中再次测试了代码。

EDIT 2 让我们看看我会犯多少次错误。我将代码更新为可以工作的代码(至少在另一个本地WP沙盒上)。