Php 具有产品属性过滤的Woocommerce产品循环

Php 具有产品属性过滤的Woocommerce产品循环,php,wordpress,woocommerce,shortcode,product,Php,Wordpress,Woocommerce,Shortcode,Product,不幸的是,由于woocommerce短代码不支持按产品属性过滤。我正试图修改这个简单的products循环脚本,通过url参数仅返回基于产品的内容(例如:mysite.com/?location=paris)。正如它通常在产品归档页面中一样 <?php $args = array( 'post_type' => 'product', 'posts_per_page' => 12 ); $loop = new WP_Quer

不幸的是,由于woocommerce短代码不支持按产品属性过滤。我正试图修改这个简单的products循环脚本,通过url参数仅返回基于产品的内容(例如:
mysite.com/?location=paris
)。正如它通常在产品归档页面中一样

<?php
    $args = array(
        'post_type' => 'product',
        'posts_per_page' => 12
    );
    $loop = new WP_Query( $args );
    if ( $loop->have_posts() ) {
        while ( $loop->have_posts() ) : $loop->the_post();
            wc_get_template_part( 'content', 'product' );
        endwhile;
    } else {
        echo __( 'No products found' );
    }
    wp_reset_postdata();
?>


非常感谢您的帮助。

这可以通过将[products]电子商务快捷码嵌入自定义快捷码来完成,该快捷码将获取产品属性查询字符串以过滤显示的产品

要实现商业产品属性分类,请从属性slug开始。所以你需要这样设置你的URL:
mysite.com/?pa\u location=paris

因此,这里是一个允许产品属性筛选的功能自定义短代码示例:

function get_products_by_attribute( $atts ) {
    // Shortcode attributes
    $atts = shortcode_atts( array(
        'columns' => '4', // Product ID
        'attribute' => '',
        'terms' => '',
        '$orderby' => 'title',
    ), $atts, 'products_attr' );

    $queryString = $_SERVER['QUERY_STRING'];
    if( $queryString ){
        parse_str($queryString, $results);

        foreach ( $results as $key => $values ) {
            if( substr( $key, 0, 3 ) === 'pa_' ) {
                $attribute = str_replace( 'pa_', '', $key );
                $terms     = $values;
                $filtering_attribute = "attribute='$attribute' terms='$terms'";
                break;
            }
        }
    }


    $filter = isset($filtering_attribute) ? $filtering_attribute : '';
    $cols   = $atts['columns'];
    $ordby  = $atts['$orderby'];

    return do_shortcode("[products columns='$cols' $filter orderby='$ordby']");
}
add_shortcode('products_attr', 'get_products_by_attribute');
代码进入活动子主题(或活动主题)的function.php文件。测试和工作


用法示例:

您的Url类似于:
mysite.com/?pa\u location=paris

1) 在页面或帖子的wordpress文本编辑器中:

 [products_attr columns='3' orderby='rand']
2) 在php文件的html代码中:

<?php echo do_shortcode("[products_attr columns='3' orderby='rand']"); ?>


您可以将其自定义为添加到代码中

抱歉,但要使用短代码。按属性筛选产品,并将url更改为:mysite.com/?filter\u location=paris。我试图用这个参数来过滤其他页面中的产品。所以woocommerce短代码过滤器不能解决我的问题。你可以在自定义短代码中嵌入一个短代码,然后在其上获得所需的过滤,如下面的答案所示…工作得非常好!非常感谢@LoicTheAztec。
echo do_shortcode("[products_attr columns='3' orderby='rand']");