Intereting Posts
Как отсортировать (упорядочить) результаты из `get_children ()`? Уведомить автора комментария после ответа Как разместить большое количество сообщений в wordpress? как удалить категорию из базы данных Обнаружение, если плагин был включен в определенную страницу Не удалось написать тестовые примеры для плагина WordPress с использованием PHPUnit и WP-CLI Как добавить фильтр только к экземпляру класса? Почему моя кнопка загрузки изображения не работает в области виджетов WordPress? Используйте PHP в таблице стилей, чтобы указать фоновое изображение на основе идентификатора категории Заказать страницу результатов поиска по meta_value Если значение ценности не возвращается, оставшиеся Сделать URL в пользовательской гиперссылке поля проблема с петлей Сообщения не отображаются на странице Как перенести установку HTTPS WordPress на localhost? Как добавить_filter / action, чтобы прокомментировать CSS, сгенерированный функцией администратора?

Сортировка сообщений в цикле WooCommerce Членство автора

EDIT: Я провел несколько исследований, и сейчас я стою:

Я использую пользовательские типы сообщений, чтобы пользователи могли добавлять собственный контент на мой сайт. Пользователь также может подписывать платное членство (с плагином членства WooCommerce). Этот процесс работает очень хорошо.

Теперь я хочу отобразить все сообщения от пользователей в обзоре. Начиная с сообщений от участников.

Планы членства и подписанные членства хранятся в виде пользовательских типов сообщений. Пользователь подписанного членства также является автором сообщения.

Поэтому, я думаю, мне нужно использовать пользователей / авторов членства в цикле для моих типов сообщений. Для этого у меня есть цикл, который возвращает все идентификаторы автора активных членств и сохраняет их в массиве. Код выглядит так:

<ul> <?php $posts = get_posts( array( 'post_type' => 'wc_user_membership', 'post_status' => array('wcm-active'), 'numberposts' => -1, ) ); $ids = array(); foreach ( $posts as $post ) : setup_postdata( $post ); ?> <?php $post_author_id = get_post_field( 'post_author', $post_id ); array_push( $ids, get_the_author_meta('ID', $post_author_id) ); ?> <?php endforeach; wp_reset_postdata(); ?> </ul> <?php print_r($ids); ?> 

Результат выглядит следующим образом:

 Array ( [0] => 545 [1] => 543 [2] => 542 [3] => 538 [4] => 6 ) 

На данный момент я показываю сообщения, разделенные категорией.

Например: у меня 10 категорий, и я показываю 6 сообщений для каждой категории до того, как начнется новый список сообщений для следующей категории. Эта часть также отлично работает.

Мой код выглядит так:

 <?php // Here I get the terms to display $post_type_categories = get_terms( 'post_type_category' ); ?> <ul class=" list-unstyled"> <?php // Here I show 6 posts per term from above foreach ( $post_type_categories as $post_type_category ) { $post_type_category_query = new WP_Query( array( 'post_type' => 'post_type', 'orderby' => 'date', 'order' => 'DESC', 'posts_per_page' => 6, 'tax_query' => array( array( 'taxonomy' => 'post_type_category', 'field' => 'slug', 'terms' => array( $post_type_category->slug ), 'operator' => 'IN' ) ) ) ); ?> <li class="mb-5"> <p class="h4"><?php /* Display the term title as headline */ echo $post_type_category->name; ?></p> <ul class="list-unstyled row"> <?php // Show posts from the category // Here I want to display the posts from an author with a specific membership plan (meta data?!) first if ( $post_type_category_query->have_posts() ) : while ( $post_type_category_query->have_posts() ) : $post_type_category_query->the_post(); ?> <li class="col-lg-4"> <strong><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute('echo=0'); ?>"><?php the_title(); ?></a></strong> </li> <?php endwhile; endif; ?> </ul> </li> <?php $post_type_category_query = null; wp_reset_postdata(); } ?> </ul> 

Он отображает список категорий и 6 сообщений для каждой категории.

Есть ли способ объединить эти две петли и показать сообщения от участников сверху?

Я думаю, мне нужно использовать параметры автора из WP_Query ( https://codex.wordpress.org/Class_Reference/WP_Query#Author_Parameters ), чтобы сделать это?

Я могу показывать только сообщения от участников, но я не знаю, как объединить эти сообщения и отсортировать их. Также не должно быть дубликатов в цикле (сообщения членов сверху и остальной части сообщений)

Я бы поставил post как member_post когда он был отправлен в базу данных, и используйте этот флаг для сортировки.

 function wpse_287048_flag_member_post( $post_id ) { if ( wc_memberships_get_user_active_memberships() !== false ) { // Check if user is member update_post_meta( $post_id, 'member_post', 1 ); } else { update_post_meta( $post_id, 'member_post', 0 ); } } add_action( 'save_post', 'wpse_287048_flag_member_post' ); 

Затем вы можете восстановить свое сообщение, отсортированное по member_post .

 function wpse_287048_get_posts() { $query = new WP_Query(array( 'post_type' => 'post', 'meta_key' => 'member_post', 'orderby' => 'meta_value_num post_date', )); return $query->get_posts(); } 

Имейте в виду, что все сообщения, которые вы хотите получить, должны иметь member_post meta_key с некоторым значением, иначе они не будут выбраны из базы данных.