Сортировка постов на главной странице
Пытаюсь сделать подобный вывод постов
Здесь планируется вывод последних записей из всех категорий(т.е получается сортировка по дате)
Код
<?while(have_posts()): the_post();?> <article itemscope itemtype="http://schema.org/Article"> <div class="post"> <a class="full-post" href="<?php the_permalink();?>"> <?php $args = array( 'post_type' => 'attachment', 'numberposts' => 1, 'post_status' => null, 'post_parent' => $post->ID, 'exclude' => get_post_thumbnail_id() ); $attachments = get_posts( $args ); if ( $attachments ) : foreach ( $attachments as $attachment ) { echo wp_get_attachment_image( $attachment->ID, 'full', false, array ("class" => "img img-fluid img-thumbnail")); }; else: print '<img class="img img-fluid img-thumbnail" src="'. get_bloginfo('template_directory'). '/images/no_image.jpg' . '" alt="no image" />'; endif; ?></a> <div class="post-block"> <span class="post-title"> <a href="<?php the_permalink();?>"><?php the_title();?></a> </span> <div class="post-info"> <span><i class="fa fa-calendar"></i><?php the_time('j F Y');?></span> <span><i class="fa fa-user"></i><?php the_author(); ?></span> <span><i class="fa fa-eye"></i><?php echo get_post_meta( $post->ID, 'views', true ); ?></span> </div> <?php the_excerpt();?> </div> </div> <meta itemprop="author" content="<?php the_author(); ?>"> </article> <?endwhile;?>
Как прикрутить эту самую сортировку не могу понять.
Хотелось бы конкретный пример какой код куда вставить.
В планах сортировка по дате,кол-ву комментов,кол-ву просмотров .
У неиерархических типов записей сортировка по дате включена по умолчанию. Разве нет?
Изменить параметры запроса основного цикла можно через функцию, подключенную на хук pre_get_posts.
Обратите внимание, что при написании пользовательской функции для этого хука нужно обязательно проверять, где будет выполняться код. Иначе могут быть неожиданные результаты.
В случае с сортировкой постов функция будет выглядеть как-то так:
Разумеется, что такой код надо размещать в functions.php
Если речь идет о внутреннем цикле, то добавьте
orderby
иorder
в массив параметров запроса. Описание всех параметров - https://wp-kama.ru/function/wp_queryСортировка по произвольному полю описывается в параметрах запроса так:
Вроде бы как с горем пополам разобрался,кажется...почти.
Вывод по кол-ву комментов:
За последнюю неделю:
Но я так понял что в стандарте нет сортировки по кол-ву просмотров.
Кол-во просмотров поста сделано через функцию:
Делаю так:
Но такое ощущение что не работает,потому что два поста на тест-сайте,у первого 11просмотров у второго 9,и выводится все-равно второй пост независимо от значения в 'meta_value'.
Чет я не догоняю уже или одно из двух...
внимательно почитайте описание параметров запроса https://wp-kama.ru/function/wp_query
в первом случае получаются посты, у которых _есть_ комментарии (больше или равно 1). Чтобы получить самый комментируемый пост, добавьте сортировку по комментариям
'orderby' => 'comment_count', 'order' => 'DESC'
и установите ограничение в posts_per_page = 1
Работает, но не так как вы хотите.
в массиве 'meta_query' нет параметра 'meta_value'. Есть просто 'value'. meta_value это старый параметр, используется в основном массиве параметров.
Чтобы отсортировать посты по произвольному полю и получить только самый просматриваемый пост, нужно запрос составить так: