【问题标题】:How do I get woocommerce product listing to show all products in one page?如何让 woocommerce 产品列表在一页中显示所有产品?
【发布时间】:2023-03-31 09:00:01
【问题描述】:

我在网站中有以下类别: http://rivetnuttool.com/site/product-category/blue-pneumatic-rivet-nut-tools/ 而且我希望它在第一页中显示所有 7 种产品,即使我有 100 种产品要在一个页面中显示它们。 我尝试了不同的解决方案,例如将其添加到我的 functions.php 文件中: add_filter('loop_shop_per_page', create_function('$cols', 'return -1;'));

重写短代码就像这里提出的解决方案http://ideas.woothemes.com/forums/133476-woocommerce/suggestions/4146798-add-pagination-support-for-list-of-products-render

还有其他几个在线选项,它们似乎都不起作用,我总是得到分页和限制。

网站使用的主题是Divi。

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    只需将条件检查添加到您的 functions.php 文件中:

    if( isset( $_GET['showall'] ) )
    {
        add_filter( 'loop_shop_per_page', create_function( '$cols', 'return -1;' ) );
    }
    else
    {
        add_filter( 'loop_shop_per_page', create_function( '$cols', 'return 12;' ) );
    }
    

    【讨论】:

      【解决方案2】:

      loop_shop_per_page 是正确的过滤器。如果您没有看到任何效果,请添加稍后的优先级。在我的测试用例中,我的父主题正在过滤 loop_shop_per_page,所以我的子主题的过滤器没有做任何事情。

      add_filter( 'loop_shop_per_page', 'so_31843880_show_all_products', 20 );
      function so_31843880_show_all_products(){
          return -1;
      }
      

      要将过滤器仅应用于产品类别,您需要添加一些条件逻辑:

      add_filter( 'loop_shop_per_page', 'so_show_all_products' );
      function so_31843880_show_all_products($per_page){
          if( is_taxonomy('product_cat') ){
              $per_page = -1;
          }
          return $per_page;
      }
      

      【讨论】:

        【解决方案3】:

        我更正并将上述博客文章中的自定义代码更改为:

        function shortcode_settori( $atts ) {
                    global $woocommerce_loop;
        
                    extract( shortcode_atts( array(
                            'per_page' => '24',
                            'columns' => '4',
                            'orderby' => 'title',
                            'order' => 'desc',
                            'settore' => '', // Slugs
                            'operator' => 'IN' // Possible values are 'IN', 'NOT IN', 'AND'.
                    ), $atts ) );
                    if ( ! $settore ) {
                            return '';
                    }
                    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
                    // Default ordering args
                    $ordering_args = WC()->query->get_catalog_ordering_args( $orderby, $order );
        
                    $args = array(
                'post_type'             => 'product',
                'post_status'           => 'publish',
                'ignore_sticky_posts'   => 1,
                'posts_per_page'        => '999',
                'meta_query'            => array(
                    array(
                        'key'           => '_visibility',
                        'value'         => array('catalog', 'visible'),
                        'compare'       => 'IN'
                    )
                ),
                'tax_query'             => array(
                    array(
                        'taxonomy'      => 'product_cat',
                        'field' => 'term_id', //This is optional, as it defaults to 'term_id'
                        'terms'         => $settore,
                        'operator'      => 'IN' // Possible values are 'IN', 'NOT IN', 'AND'.
                    )
                )
                    );
                    $products = new WP_Query($args);
        
                    $woocommerce_loop['columns'] = $columns;
                    if ( $products->have_posts() ) : ?>
                            <?php woocommerce_product_loop_start(); ?>
                            <?php while ( $products->have_posts() ) : $products->the_post(); ?>
                                    <?php wc_get_template_part( 'content', 'product' ); ?>
                            <?php endwhile; // end of the loop. ?>
                            <?php woocommerce_product_loop_end(); ?>
        
                    <?php endif;
                    if($products->max_num_pages>1){
                    ?>
                    <nav class="woocommerce-pagination">
                        <?php
                        echo paginate_links( apply_filters( 'woocommerce_pagination_args', array(
                            'base' => esc_url( str_replace( 999999999, '%#%', remove_query_arg( 'add-to-cart', get_pagenum_link( 999999999, false ) ) ) ),
                            'format' => '',
                            'current' => max( 1, get_query_var( 'paged' ) ),
                            'total' => $products->max_num_pages,
                            'prev_text' => '&larr;',
                            'next_text' => '&rarr;',
                            'type' => 'list',
                            'end_size' => 3,
                            'mid_size' => 3
                            ) ) );
                            ?>
                    </nav>
        
            <?php }
            woocommerce_reset_loop();
            wp_reset_postdata();
            echo $return;
            $return = '<div class="woocommerce columns-' . $columns . '">' . ob_get_clean() . '</div>';
            // Remove ordering query arguments
            WC()->query->remove_ordering_args();
        
            return $return;
        }
        
        add_shortcode( 'prodotti_per_settore', 'shortcode_settori' );
        

        现在一切正常。

        【讨论】:

          【解决方案4】:

          现在,在 2019 年,我只需通过以下方式调整自定义面板中的参数: 外观>自定义>WooCommerce 选项>商店存档侧边栏布局>每页总产品 然后,把我想要的数字填进去。

          【讨论】:

            猜你喜欢
            • 2017-06-14
            • 2022-01-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多