Я пытаюсь создать собственный шорткод, который позволит мне отображать продукты с уровнем запасов, равным или превышающим установленное числовое значение.
Так что в идеале я мог бы поместить шорткод в строку:
[product_category category = "secret-wars" stock = "3"]
Что будет отображать продукты в категории секретных войн с 3 или более на складе.
Обновление № 1:
Итак, я нашел некоторый код LoicTheAztec, который, я надеюсь, я смогу изменить в соответствии с моими требованиями здесь Отображение продуктов WooCommerce с помощью шорткода с использованием пользовательского meta_query
Я попытался внести некоторые изменения, но не могу заставить код работать, вот код, который у меня сейчас есть:
if( ! function_exists('minimum_stock') ) {
// Add Shortcode
function minimum_stock( $atts ) {
global $woocommerce_loop;
// Attributes
$atts = shortcode_atts(
array(
'columns' => '5',
'limit' => '40',
'stock' => '3',
),
$atts, 'minimum_stock'
);
$woocommerce_loop['columns'] = $atts['columns'];
// The WP_Query
$products = new WP_Query( array (
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => $atts['limit'],
'meta_query' => array(
'stock' => array(
'key' =>'_stock',
'type' => 'numeric',
'value' => ''
'compare' => '>=',
),
)
));
ob_start();
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
} else {
do_action( "woocommerce_shortcode_products_loop_no_results", $atts );
echo "<p>There are no results.</p>"
}
woocommerce_reset_loop();
wp_reset_postdata();
return '<div class="woocommerce columns-' . $atts['columns'] . '">' . ob_get_clean() . '</div>';
}
add_shortcode( 'stock', 'minimum_stock' );
}
Я тоже пытался прийти к этому немного по-другому:
// Add Minimum Stock Shortcode
function minimum_stock_func ( $atts , $args ) {
$a = shortcode_atts( array(
'stock' => $args = array(
'meta_key' => '_stock',
'type' => 'numeric',
'meta_value' => '',
'compare' => '>='
), $atts ) );
return "stock = {$a['stock']}";
}
add_shortcode( 'stock', 'minimum_stock_func' );
Если кто-нибудь поймет, что я делаю неправильно, ваша помощь будет очень признательна!
Обновление № 2:
Хорошо, я думаю, что я доберусь
Мне удалось получить минимальный запас 3, чтобы показать, используя этот код:
// Minimum Stock Shortcode
add_shortcode( 'minimum_stock', 'minimum_stock_shortcode' );
function minimum_stock_shortcode( $atts ) {
global $product, $woocommerce, $woocommerce_loop;
// Attributes
$atts = shortcode_atts(
array(
'limit' => '40',
'columns' => '5',
'orderby' => 'title',
'order' => 'asc',
'category' => '',
'cat_operator' => 'IN',
),
$atts, 'minimum_stock'
);
$woocommerce_loop['columns'] = $atts['columns'];
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => $atts['limit'],
'orderby' => $atts['orderby'],
'order' => $atts['order'],
'meta_query' => array(
array(
'key' => '_stock',
'value' => 3,
'compare' => '>='
)
),
'tax_query' => array( array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => $atts['category'],
)
)
);
$loop = new WP_Query($args);
ob_start();
woocommerce_product_loop_start();
while ( $loop->have_posts() ) : $loop->the_post();
wc_get_template_part( 'content', 'product' );
endwhile;
woocommerce_product_loop_end();
woocommerce_reset_loop();
wp_reset_postdata();
return '<div class="woocommerce columns-' . $columns . '">' . ob_get_clean() . '</div>';
}
Это отобразит товары в категории с минимальным запасом 3, с этим коротким кодом:
[минимум_сток категории = "издатели комиксов"]
Кто-нибудь знает, как я могу заставить его работать, если шорткод был таким:
[productsimum_stock = "2" категория = "комиксы-издатели"]
Я хотел бы иметь возможность использовать шорткод Woocommerce [products], так как с ним я также получу пагинацию, и над продуктами появится выпадающее меню «orderby». Я также хотел бы иметь возможность указывать минимальную сумму с помощью [Minimum_stock = "2"], а не указывать ее в запасе для шорткода.
Любая помощь будет принята с благодарностью.
С уважением,
JP