如何获得woocommerce产品列表以在一个页面中显示所有产品?

时间:2015-08-05 22:28:20

标签: php wordpress woocommerce

我在网站中有以下类别:     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。

4 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:2)

只需将条件检查添加到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 :(得分:0)

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

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' );

现在一切正常。

答案 3 :(得分:0)

现在,在2019年,我可以通过以下方式在“自定义”面板中调整参数: 外观>自定义> WooCommerce选项> Shop Archive侧边栏布局>每页总产品 然后,在其中填入我想要的号码。

相关问题