Иногда требуется быстро вывести товары с определенной меткой. Данный шорткод проверял лично — работает.
// Шорткод для вывода товаров по метке
function woo_products_by_tags_shortcode( $atts, $content = null ) {
// Get attribuets
extract(shortcode_atts(array(
"tags" => ''
), $atts));
ob_start();
// Define Query Arguments
$args = array(
'post_type' => 'product',
'posts_per_page' => 10,
'product_tag' => $tags
);
// Create the new query
$loop = new WP_Query( $args );
// Get products number
$product_count = $loop->post_count;
if( $product_count > 0 ) :
echo '<div class="tax-product_tag woocommerce-page"><div class="woocommerce"><ul class="products columns-'.esc_attr( wc_get_loop_prop( 'columns' ) ).'">';
while ( $loop->have_posts() ) : $loop->the_post(); global $product;
wc_get_template_part( 'content', 'product' );
endwhile;
echo '</ul></div></div>';
else :
_e('No product matching your criteria.');
endif; // endif $product_count > 0
return ob_get_clean();
}
add_shortcode("woo_products_by_tags", "woo_products_by_tags_shortcode");
В данной функции предусмотрен вывод товаров по колонкам (wc_get_loop_prop( ‘columns’ )).
Шорткод выглядит так:
[woo_products_by_tags tags="shoes,socks"]
Данный шорткод можно расширять, например добавив в него параметр количество товаров. Для этого нужно дополнить функцию парсинга шорткода:
extract(shortcode_atts(array(
"tags" => '',
"per_page" => ''
), $atts));
и далее функцию выборки товаров:
$args = array(
'post_type' => 'product',
'posts_per_page' => $per_page,
'product_tag' => $tags
);
Вывод товаров по метке без шорткода
Без шорткода товары по метке (product_tag) выводятся так:
<h2 class="index">Под заказ</h2>
<div class="carousel"><div class="multiple-items woocommerce products">
<?php $args = array(
'post_type' => 'product',
'posts_per_page' => 4,
'columns' => 4,
'tax_query' => array(
array(
'taxonomy' => 'product_tag',
'field' => 'slug',
'terms' => 'zakaz'
)
)
);
$myposts = get_posts( $args );
foreach( $myposts as $post ) : setup_postdata($post); ?>
<div <?php post_class( $classes ); ?>><span>
<?php do_action( 'woocommerce_before_shop_loop_item' );
do_action( 'woocommerce_before_shop_loop_item_title' );
do_action( 'woocommerce_shop_loop_item_title' );
do_action( 'woocommerce_after_shop_loop_item_title' );
do_action( 'woocommerce_after_shop_loop_item' ); ?>
</span></div>
<?php endforeach; ?>
<?php wp_reset_postdata() ?>
</div></div>
В данном примере также приведена верстка для функционала карусели
Более простой вывод товаров по метке (параметр product_tag):
<div class="carousel"><ul class="multiple-items woocommerce products">
<?php query_posts($query_string.'&post_type=product&posts_per_page=10&product_tag=action');
if(have_posts()) :
while(have_posts()) : the_post();
get_template_part('solus-product');
endwhile; endif; ?>
</ul></div>
Вывод товаров по метаполю
На основе решения по созданию шорткода вывода товаров по тегам можно сделать вывод товаров по метаполю
// Шорткод для вывода товаров по полю
function woo_products_by_meta_shortcode( $atts, $content = null ) {
// Get attribuets
extract(shortcode_atts(array(
"meta" => '',
"per_page" => ''
), $atts));
ob_start();
// Define Query Arguments
$args = array(
'post_type' => 'product',
'posts_per_page' => $per_page,
'meta_key' => $meta
);
// Create the new query
$loop = new WP_Query( $args );
// Get products number
$product_count = $loop->post_count;
if( $product_count > 0 ) :
echo '<div class="tax-product_tag woocommerce-page"><div class="woocommerce"><ul class="products columns-'.esc_attr( wc_get_loop_prop( 'columns' ) ).'">';
while ( $loop->have_posts() ) : $loop->the_post(); global $product;
wc_get_template_part( 'content', 'product' );
endwhile;
echo '</ul></div></div>';
else :
_e('No product matching your criteria.');
endif; // endif $product_count > 0
return ob_get_clean();
}
add_shortcode('woo_products_by_meta', 'woo_products_by_meta_shortcode');
Шорткод будет таким
[woo_products_by_meta meta="_checkbox_new"]
[site-socialshare]