порядок запросов WordPress WP по количеству просмотров

#php #mysql #sql #wordpress #elementor

#php #mysql #sql #wordpress #элементор

Вопрос:

здравствуйте, я хотел упорядочить тип публикации статей по количеству просмотров в WordPress. итак, я добавил настраиваемое поле в тип публикации статьи, имя которого — view, и это числовое поле. Я добавил его с помощью PODS. Я написал этот код в header.php таким образом, он будет автоматически увеличиваться при каждом просмотре:

 <?php 
    if( get_post_type() == 'article' ) {
        $postview = intval(get_post_field('views'));
        if($postview > 0){
            $postview = $postview 1;
        }else{
            $postview = 1;
        }
        $postID = $post->ID;
        update_post_meta($postID,'views',$postview);
    }   
?> 

это сработало. но когда я хотел добавить расширенный запрос с помощью elementor, он работает не так, как ожидалось. Я добавил это в functions.php:

 add_action( 'elementor/query/popular_articles', function( $query ) {
    $query->set('post_type', 'article');
    $query->set('meta_key', 'views');
    $query->set('orderby', 'meta_value_num');
    $query->set('order', 'DESC');
    
} ); 

Я также пробовал это:

 add_action( 'elementor/query/popular_articles', function( $query ) {
    $query->set('orderby', 'views');
} ); 

ни один из них не работает должным образом в виджете elementor posts, и результат не сортируется. когда я задаю запрос popular_article. то, чего я хочу достичь с помощью WordPress WP_Query, — это что-то вроде этого SQL-запроса:

 select post_title ,wp_z9gsc7_postmeta.meta_key,wp_z9gsc7_postmeta.meta_value from wp_z9gsc7_posts INNER JOIN wp_z9gsc7_postmeta ON wp_z9gsc7_posts.ID = wp_z9gsc7_postmeta.post_id where wp_z9gsc7_postmeta.meta_key = 'views' ORDER BY wp_z9gsc7_postmeta.meta_value DESC
 

заранее благодарим вас за ответ

Ответ №1:

это сработало:

 add_action( 'elementor/query/popular_articles', function( $query ) {
$query->set('post_type', 'article');
$query->set('meta_key', 'views');
$query->set('orderby', 'meta_value_num');
$query->set('order', 'DESC');
$query->set('offset', 0);
} );