我使用的插件已经计算了产品视图,并将其存储在一个名为' mwb_wpr_data'的表中。
列出产品视图的查询是:
SELECT DISTINCT('productid') FROM 'mwb_wpr_data' WHERE 'action' = 'view'
productid领域是Woocomerce产品的FK。
如何修改Woocommerce默认排序,以便按照表格中的大多数观看次序显示产品' mwb_wpr_data'?
使用插件Post View Counter的当前代码:
add_action( 'pre_get_posts', 'my_view_filter' );
function my_view_filter($query){
if (
$query->is_main_query() &&
( $query->is_home() || $query->is_archive() || $query->is_search() )
) {
$query->set('suppress_filters', 'false');
$query->set('orderby', 'post_views');
$query->set('order', 'DESC');
}
}
答案 0 :(得分:2)
据我说你已经设置了正确的pre_get_post,但问题出在你的if条件中。
您已为每个用户设置了不正确过滤器的current_user_can,因此,如果您未使用管理员角色登录,则查询将无效。
current_user_can('administrator')
从条件中移除上面的一个。
add_action( 'pre_get_posts', 'my_view_filter' );
function my_view_filter($query){
if ($query->is_main_query() && ( $query->is_home() || $query->is_archive() || $query->is_search() )
) {
$query->set('suppress_filters', 'false');
$query->set('orderby', 'post_views');
$query->set('order', 'DESC');
}
}
答案 1 :(得分:1)
不确定您正在使用的插件(如果您提供有关它的其他信息会很棒)但我已经使用Post Views Counter多年了,而且效果非常好。
它甚至还有 WP_Query 的查询参数(通过帖子浏览查询帖子):
编辑:如果没有Post Views Counter插件,此查询参数将无效,因为它不是WordPress的默认参数。
此处有关此插件API的更多信息: https://dfactory.eu/docs/post-views-counter/developers-api/
$query_args = array(
'posts_per_page' => 12,
'order' => 'DESC',
'suppress_filters' => false, //required param
'orderby' => 'post_views', //required param
);
$query = new WP_Query( $query_args );
if ( $query->have_posts() ):
while ( $query->have_posts() ): $query->the_post();
//Post content here
echo get_the_title();
endwhile;
endif;
我希望这有帮助, 干杯!
答案 2 :(得分:1)
好的,所以这样做的正确方法是
更改您的帖子视图计数的存储方式,以便将它们存储为_post_views_count等字段中每个产品(帖子)的postmeta。
使用meta_key&在这样的wp_query中订购
$args = array(
'meta_key' => '_post_views_count',
'orderby' => 'meta_value_num',
'order' => 'ASC'
);
<编辑>
如果您想使用相同的插件来记录您的产品视图,我会设置一个函数,每次将帖子视图添加到更新产品的postmeta字段的表格时都会触发该函数。
优雅吗?否。
会起作用吗?是。
答案 3 :(得分:1)
根据插件文档,您还需要传递post_type才能使其正常工作,即
$args = array(
'order' => 'asc',
'post_type' => 'event',
// required by PVC
'suppress_filters' => false,
'orderby' => 'post_views',
'fields' => ''
);
$most_viewed = get_posts( $args );
该代码位于@Marounm评论中较高的帖子中。
尝试传递post_type arg,即。
$query->set('post_type', 'product');
答案 4 :(得分:0)
如果要显示观看次数最多的产品,则可以按照以下步骤操作。
步骤:1,我使用(add_menu_page)函数在管理面板中添加了菜单。在功能文件中
function admin_manage_users22(){
add_menu_page('My Page Title', 'MVP', 'manage_options', 'MVP_backend_view',
'MVP_backend_view' );
}
add_action('admin_menu', 'admin_manage_users22');
步骤:2在用户查看带有帖子ID的wp_postmeta中的产品+1计数器值后,获取产品详细信息。默认值设置1
function MVP_product_details($product ) {
$post_id = get_the_ID();
$count_key = 'AK_product_view_count';
$count = get_post_meta( $post_id, $count_key, true );
if ( empty( $count ) ) {
delete_post_meta( $post_id, $count_key );
update_post_meta( $post_id, $count_key, '1' );
echo "count null";
}else{
$count ++;
update_post_meta( $post_id, $count_key, (string) $count );
}
}
add_filter( 'woocommerce_quantity_input_args', 'MVP_product_details', 10, 2 );
步骤:3现在,您只需使用以下代码即可查看最多的产品详细信息。
function MVP_backend_view(){
$count_key = 'AK_product_view_count';
$query_args = array(
'posts_per_page' => 3,
'no_found_rows' => 1,
'post_status' => 'publish',
'post_type' => 'product',
'orderby' => 'meta_value',
'order' => 'DESC',
'meta_key' => $count_key,
);
$query_args['meta_query'] = array(
array(
'key' => $count_key,
'value' => '0',
'type' => 'numeric',
'compare' => '>',
),
);
$zwcmvp_query = new WP_Query( $query_args );