Динамические пользовательские продукты WooCommerce на страницу не совместимы с релевантными - PullRequest
0 голосов
/ 10 января 2019

У меня есть woocommerce продуктов на странице вниз. Он работает отлично, но когда применяется к результатам поиска, он ломается, и я использую релевантность для поиска, вот мой код для выпадающего / выберите в моих функциях. 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 этой страницы example.com/?s=test&post_type=product после нажатия раскрывающегося списка на 60 страницах вместо example.com/?s=test&post_type=product&ga_select_ppp=60 он переходит к этому URL example.com/? ga_select_ppp = 60 и 60 товаров на странице не отображаются. Итак, какие релевантные хуки и фильтры релевантности нужно использовать и как? Спасибо

1 Ответ

0 голосов
/ 10 января 2019

Форма отправляет только параметр 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. Релеванси довольно хорошо понимает http://www.example.com/?s=test&post_type=product&posts_per_page=60.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...