Intereting Posts
Баннер, отображающий скрипты на боковой панели register_rest_field для пользовательских полей таксономии, которые связаны с настраиваемым типом сообщения Использование BuddyPress> «Страница регистрации» Обзор с последними отредактированными сообщениями и страницами Как я могу исправить комментарии четных / нечетных дочерних классов, чтобы на комментарии не влиял четный / нечетный уровень верхнего уровня? как проверить, существует ли столбец пользовательского столбца? что такое имя_параметра в базе данных, которое хранит информацию о текущем виджет-инициаторе в боковой панели frontend? Удаление «http: //», когда echo url WordPress Customizer: пользовательское перенаправление после закрытия Сохранить значения метаданных в виде массива в wp_postmeta Как добавить заголовок к вложению изображения в список файлов? Получить миниатюру сообщения из подстраниц с петлей foreach Как выбрать несколько мультимедийных файлов для формы виджетов? Какой крюк запускается первым (init, … или ???) как добавить пользовательскую информацию на страницу автора? плагин, детская тема?

Как отобразить определенную категорию с помощью пользовательского запроса?

Привет, я хочу отобразить определенную категорию из пользовательского запроса в WordPress. Мой код работает отлично, и он получает последние 4 сообщения, но теперь я хочу получить определенную категорию. Мой код ниже спасибо:

global $wpdb; $posts = $wpdb->get_results('SELECT ID, post_title AS title, post_excerpt AS excerpt FROM '.$wpdb->posts.' WHERE post_type = "post" AND post_status = "publish" ORDER BY post_date DESC LIMIT 4'); 

Прежде всего, WordPress предоставляет лучшие способы запроса с базой данных. Вы не должны делать свой запрос напрямую с $wpdb если это абсолютно необходимо. WP_Query вы должны использовать WP_Query и get_posts() для получения данных из базы данных WordPress. Если вы хотите больше узнать об этом, прочтите здесь . @Rarst предоставил большое объяснение лучшим способам сделать запрос в WordPress.

Теперь я собираюсь использовать WP_Query для отображения 4 последних сообщений из категории id 22. В следующих параметрах вы можете указать идентификатор категории в cat или вместо этого вы можете использовать category_name но тогда вам нужно будет предоставить категорию slug как значение (не название категории ).

 <?php $args = array( 'post_type' => 'post', 'cat' => '22', 'ignore_sticky_posts' => 1, 'posts_per_page' => 4, ); $my_query = new WP_Query( $args ); if ( $my_query->have_posts() ) : while ( $my_query->have_posts() ) : $my_query->the_post(); get_template_part( 'content', get_post_format() ); endwhile; endif; wp_reset_postdata(); ?> 

Если вы настаиваете на продолжении этого пути с использованием SQL-запросов, вы должны сначала понять, как термины таксономии соединяются с сообщениями:

  • $wpdb->posts.ID <-> $wpdb->term_relationships.object_id
  • $wpdb->term_relationships.term_taxonomy_id <-> $wpdb->term_taxonomy.term_taxonomy_id
  • $wpdb->term_taxonomy.term_id <-> $wpdb->terms.term_id

Имея это в виду и предполагая, что вы предоставляете параметры $ taxonomy (string) и $ term_slug (string) для категории, которую вы фильтруете, я предполагаю, что ваш код написан как:

 function get_top_posts_by_term($taxonomy = 'category', $term_slug = '') { if(empty($term_slug)) { // Can't continue without valid inputs return FALSE; } global $wpdb; $query = $wpdb->prepare(" SELECT p.ID, p.post_title AS title, p.post_excerpt AS excerpt FROM $wpdb->posts p INNER JOIN $wpdb->term_relationships rel ON p.ID = rel.object_id INNER JOIN $wpdb->term_taxonomy tax ON rel.term_taxonomy_id = tax.term_taxonomy_id INNER JOIN $wpdb->terms t ON tax.term_id = t.term_id WHERE p.post_type = 'post' AND p.post_status = 'publish' AND tax.taxonomy = %s AND t.slug = %s ORDER BY p.post_date DESC LIMIT 4;", $taxonomy, // the first %s (tax.taxonomy) $term_slug // the second %s (t.slug) ); $posts = $wpdb->get_results($query); return $posts; } 

Я пользуюсь использованием строк с двойными кавычками PHP при работе с SQL-запросами, потому что

  • Я могу использовать строчную интерполяцию с переменными $ wpdb -> {table name}.
  • Строки SQL, где они используются, имеют тенденцию использовать однокасканные строки (я думаю, что MySQL немного слабее в этом отношении, но это хорошая практика). Строки PHP с двойным кавычком позволяют мне использовать строковые литералы с одной кавычкой, не выходя из моей строки или вставляя escape-символы.

Напишите свой запрос следующим образом

 <?php $query = new WP_Query('category_name=your category name &posts_per_page=-1'); if ( $query ->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); the_content(); endwhile; endif; wp_reset_postdata(); ?> 

Вы хотите запросить сообщение для категории частиц. Поэтому вам нужно определить пользовательский запрос. WP_Query() делает это. Просто настройте параметр в WP_Query() . Вы также можете ответить Роберту Хью. Вы очищаетесь?