按 WooCommerce 中查看次数最多的方式对所有产品进行排序和显示
Sort and display all products by most viewed in 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, 'product_visit_count', $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;
}
但是它不显示所有其他没有任何页面浏览量的产品。
有没有一种方法可以按页面浏览量排序并同时显示其他产品(还没有页面浏览量)。
有什么想法吗?
为此,所有其他产品(尚未查看)应该需要具有 product_visit_count
元键 且 元值为 0
.
您可以通过添加这个简单的函数来做到这一点,您将 运行 一次 (始终进行数据库备份):
// 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 文件。
保存后,以管理员用户身份,浏览您网站的任意页面,执行该功能。 现在您可以删除它 (删除它)。已测试并有效。
现在对于即将推出的新产品,当您添加新产品时,以下脚本将添加 product_visit_count
元键 和 元0
的值:
add_action( 'woocommerce_admin_process_product_object', 'init_product_visit_count_on_new_prodct' );
function init_product_visit_count_on_new_prodct( $product ) {
// Get 'product_visit_count' meta value
$meta_value = $product->get_meta( 'product_visit_count' );
// If meta value doesn't exist
if ( empty($meta_value) ) {
// Set the 'product_visit_count' to zero
$product->update_meta_data( 'product_visit_count', 0 );
}
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。应该可以。
受线程 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, 'product_visit_count', $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;
}
但是它不显示所有其他没有任何页面浏览量的产品。
有没有一种方法可以按页面浏览量排序并同时显示其他产品(还没有页面浏览量)。
有什么想法吗?
为此,所有其他产品(尚未查看)应该需要具有 product_visit_count
元键 且 元值为 0
.
您可以通过添加这个简单的函数来做到这一点,您将 运行 一次 (始终进行数据库备份):
// 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 文件。
保存后,以管理员用户身份,浏览您网站的任意页面,执行该功能。 现在您可以删除它 (删除它)。已测试并有效。
现在对于即将推出的新产品,当您添加新产品时,以下脚本将添加 product_visit_count
元键 和 元0
的值:
add_action( 'woocommerce_admin_process_product_object', 'init_product_visit_count_on_new_prodct' );
function init_product_visit_count_on_new_prodct( $product ) {
// Get 'product_visit_count' meta value
$meta_value = $product->get_meta( 'product_visit_count' );
// If meta value doesn't exist
if ( empty($meta_value) ) {
// Set the 'product_visit_count' to zero
$product->update_meta_data( 'product_visit_count', 0 );
}
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。应该可以。