如何解决按WooCommerce中查看最多的商品排序和显示所有产品
受线程 Sort Woocommerce products by most viewed using Post View Counter 的启发,下面是我的代码,该代码更改了产品排序选项,以显示查看次数最多的产品:
/**
* Setting post count on each visit
*
*/
add_action( 'woocommerce_before_single_product','prefix_save_product_views' );
function prefix_save_product_views( ) {
$product_id = get_the_ID();
$increment = 1;
$current_visit_count = get_post_meta( $product_id,'product_visit_count',true );
$total_visit_count = (int)$current_visit_count + $increment;
update_post_meta( $product_id,$total_visit_count );
}
/**
* Change the display order based on visit count only in Catalog
*
*/
add_filter('woocommerce_get_catalog_ordering_args','prefix_woocommerce_catalog_orderby');
function prefix_woocommerce_catalog_orderby( $args ) {
$args['meta_key'] = 'product_visit_count';
$args['orderby'] = 'meta_value_num';
$args['order'] = 'desc';
return $args;
}
但是,它不会显示没有页面浏览量的所有其他产品。
是否有一种方法可以优先排序按页面浏览量排序,并在此之后同时显示其他产品(尚无页面浏览量)。
请问有什么主意吗?
解决方法
为此,所有其他产品(尚未查看)应具有{strong>元值为product_visit_count
的0
元密钥。 / p>
您可以通过添加此简单功能来做到这一点,您只需运行一次(总是进行数据库备份):
// Function that set "product_visit_count" metakey with a zero value on non visited products
function set_zero_product_visit_count_on_not_visited_products() {
// Only for admin user role
if( ! current_user_can('edit_products')) return;
// Get all products that doesn't have "product_visit_count" as metakey (not visited)
$product_ids = wc_get_products( array(
'limit' => -1,'return' => 'ids','meta_key' => 'product_visit_count','meta_compare' => 'NOT EXISTS',) );
// Loop through product ids
foreach( $product_ids as $product_id ) {
// Add 'product_visit_count' meta key with a value of 0 (zero)
update_post_meta( $product_id,'product_visit_count',0 );
}
}
// Triggers the function
set_zero_product_visit_count_on_not_visited_products();
代码进入您的活动子主题(或活动主题)的functions.php文件中。
保存为管理员用户角色后,浏览网站的任何页面,即可执行该功能。 现在您可以将其删除 (删除)。经过测试,可以正常工作。
现在对于即将推出的新产品,当您添加新产品时,以下脚本将添加具有 meta值为product_visit_count
的{{1}} 元密钥 :
0
代码进入活动子主题(或活动主题)的functions.php文件中。应该可以。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。