RaG*_*aGu 12 php wordpress woocommerce
是否可以在wordpress的类别或页面末尾显示缺货产品?
因此,客户首先会看到可用的产品,之后会看到缺货的产品.
DAC*_*sby 12
这与Viktor&Bogdan的答案相同,但没有额外的类代码.
它使用post_clause过滤器来修改产品查询.我们JOIN将wp_postmeta表提供给查询并orderby _stock_status在现有查询前加上一个子句.这样,任何其他orderby子句也会保留在查询中.
add_filter('posts_clauses', 'order_by_stock_status');
function order_by_stock_status($posts_clauses) {
global $wpdb;
// only change query on WooCommerce loops
if (is_woocommerce() && (is_shop() || is_product_category() || is_product_tag() || is_product_taxonomy())) {
$posts_clauses['join'] .= " INNER JOIN $wpdb->postmeta istockstatus ON ($wpdb->posts.ID = istockstatus.post_id) ";
$posts_clauses['orderby'] = " istockstatus.meta_value ASC, " . $posts_clauses['orderby'];
$posts_clauses['where'] = " AND istockstatus.meta_key = '_stock_status' AND istockstatus.meta_value <> '' " . $posts_clauses['where'];
}
return $posts_clauses;
}
Run Code Online (Sandbox Code Playgroud)
如果您出于某种原因首先需要Out Of Stock项目,您可以更改istockstatus.meta_value ASC为istockstatus.meta_value DESC.
在WP:4.8上测试; WC 3.0.8
小智 12
我尝试了上面的所有解决方案,它们有效,但导致了网站上的其他问题(可能是由于主题冲突),我确信它们在不同的情况/主题下都很好。下面的代码最终对我来说非常有用(提到了来源)
来源:https ://www.businessbloomer.com/woocommerce-show-in-stock-products-first-shop/
/**
* @snippet Sort Products By Stock Status - WooCommerce Shop
* @how-to Get CustomizeWoo.com FREE
* @author Rodolfo Melogli
* @compatible WooCommerce 3.9
* @donate $9 https://businessbloomer.com/bloomer-armada/
*/
add_filter( 'woocommerce_get_catalog_ordering_args', 'bbloomer_first_sort_by_stock_amount', 9999 );
function bbloomer_first_sort_by_stock_amount( $args ) {
$args['orderby'] = 'meta_value';
$args['order'] = 'ASC';
$args['meta_key'] = '_stock_status';
return $args;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
这是重新排列产品的片段(有货在先):
<?php
/**
* Order product collections by stock status, instock products first.
*/
class iWC_Orderby_Stock_Status
{
public function __construct()
{
// Check if WooCommerce is active
if (in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins')))) {
add_filter('posts_clauses', array($this, 'order_by_stock_status'), 2000);
}
}
public function order_by_stock_status($posts_clauses)
{
global $wpdb;
// only change query on WooCommerce loops
if (is_woocommerce() && (is_shop() || is_product_category() || is_product_tag())) {
$posts_clauses['join'] .= " INNER JOIN $wpdb->postmeta istockstatus ON ($wpdb->posts.ID = istockstatus.post_id) ";
$posts_clauses['orderby'] = " istockstatus.meta_value ASC, " . $posts_clauses['orderby'];
$posts_clauses['where'] = " AND istockstatus.meta_key = '_stock_status' AND istockstatus.meta_value <> '' " . $posts_clauses['where'];
}
return $posts_clauses;
}
}
new iWC_Orderby_Stock_Status;
?>
Run Code Online (Sandbox Code Playgroud)
https://www.snip2code.com/Snippet/114858/WooCommerce-Products-Order-by-Stock-Stat