【问题标题】:Dynamic custom WooCommerce products per page is not compatible with relevanssi每页动态自定义 WooCommerce 产品与 relevanssi 不兼容
【发布时间】:2019-06-04 19:26:58
【问题描述】:

我在每页下拉菜单中有一个 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 中,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 个产品。那么,relevanssi的相关hook和filter需要用到哪些,怎么用呢?谢谢

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    表单只发送ga_select_ppp 参数,没有别的。这就是不传递spost_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。 Relevansi 非常了解http://www.example.com/?s=test&amp;post_type=product&amp;posts_per_page=60

    【讨论】:

    • 谢谢。它工作得很好,但我必须使用 pre_get_posts 过滤器可能是因为我的 relevanssi 版本或者只是它在我的代码中的其他地方。
    • Relevanssi 当然不需要,如果你直接把select 命名为posts_per_page
    • 嗨 Mikko,现在我正在制作无限卷轴。我尝试使用喷气背包实现它,但使用 serach 时它不起作用,我遇到了这个 relevanssi.com/knowledge-base/infinite-scroll-jetpack。 relveanssi 对无限滚动的支持是否有任何变化?更准确地说,我的问题是stackoverflow.com/questions/54226941/…。谢谢
    猜你喜欢
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    相关资源
    最近更新 更多