sar*_*ler 3 php wordpress product woocommerce hook-woocommerce
在WooCommerce我想隐藏股票出从产品的相关产品在单品页。是否可以?
任何曲目表示赞赏。
这里给出的答案都不适合我(我相信woocommerce_output_related_products_args
提到的过滤器不接受 meta_queries),我想要一个不使用 SQL 查询的解决方案,所以我把下面的解决方案放在一起:
add_filter( 'woocommerce_related_products', 'mysite_filter_related_products', 10, 1 );
function mysite_filter_related_products( $related_product_ids ) {
foreach( $related_product_ids as $key => $value ) {
$relatedProduct = wc_get_product( $value );
if( ! $relatedProduct->is_in_stock() ) {
unset( $related_product_ids["$key"] );
}
}
return $related_product_ids;
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助寻找类似解决方案的人。
2021 年更新
您可以使用以下内容:
add_filter( 'woocommerce_product_related_posts_query', 'alter_product_related_posts_query', 10, 3 );
function alter_product_related_posts_query( $query, $product_id, $args ){
global $wpdb;
$query['join'] .= " INNER JOIN {$wpdb->postmeta} as pm ON p.ID = pm.post_id ";
$query['where'] .= " AND pm.meta_key = '_stock_status' AND meta_value = 'instock' ";
return $query;
}
Run Code Online (Sandbox Code Playgroud)
代码位于活动子主题(或活动主题)的functions.php 文件中。
现在我们需要删除“相关产品”缓存数据,删除相关瞬态以刷新此缓存(感谢@Cody Rees)。
有两种方法可以做到这一点:
1)。最简单的方法:
转到管理 Woocommerce > 状态 > 工具 > WooCommerce 瞬态,然后按“清除瞬态”。
2)。针对要删除的特定相关瞬态的另一种方法:
添加以下代码并保存:
add_action('init', 'delete_related_products_cached_data');
function delete_related_products_cached_data() {
global $wpdb;
$wpdb->query("DELETE FROM {$wpdb->prefix}options WHERE `option_name` LIKE '_transient_wc_related_%'");
}
Run Code Online (Sandbox Code Playgroud)
代码位于活动子主题(或活动主题)的functions.php 文件中。
只需浏览网站的任何页面即可运行一次并将其删除。
归档时间: |
|
查看次数: |
1895 次 |
最近记录: |