Intereting Posts
Неправильный канал RSS Внешняя аутентификация, session_tokens не уничтожается при выходе из системы Как предотвратить пустую категорию для отображения содержимого подкатегорий? Как реализовать навигацию AJAX в WordPress? Можем ли мы получить сообщение без пули? wp_update_post ведет себя по-разному для разных пользователей Как отделить заголовок сообщения от содержимого в закодированном фрагменте таким образом: Как связать 3 компонента wordpress друг с другом (создать отношения с базой данных) Как добавить ключевое слово в пользовательскую форму программно? Как обращаться с уведомлением о метадании основного кода на действительный ввод? Сохранить значение в файле cookie Лайтбокс на странице WordPress Как создать привлекательные URL-адреса для отражения иерархии категорий? Опознать поля Условное входное маскирование Как использовать короткие коды на боковой панели виджета при выполнении вызова ajax?

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

Привет, я хочу отобразить определенную категорию из пользовательского запроса в 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() . Вы также можете ответить Роберту Хью. Вы очищаетесь?