Не отображаются записи пользовательского типа постов
Я создал пользовательский шаблон и пытаюсь получить записи типа "song", но на странице отображаются только хедер и футер. Содержимое постов не выводится. Даже если я попытаюсь вызвать обычные посты, контент также не появляется. Нужно ли где-то регистрировать этот шаблон в теме? Или что-то дополнительно вызывать?
Мой код:
<?php
/* Имя шаблона: Страница песен
*
* Выбирается из выпадающего меню на экране редактирования страницы.
*/
get_header(); ?>
<div>
<?php
if ( have_posts() ) {
while ( have_posts() ) {
the_post();
query_posts( 'post_type=song');
} // конец while
} // конец if
?></div>
<?php get_footer(); ?>
Помогите исправить мой код. Я хочу отобразить все записи пользовательского типа постов "songs". Пользовательский тип постов уже создан.
Я размещаю этот код в редакторе WordPress, у меня установлен плагин "PHP execution", который выполняет PHP-код.

В вашем коде есть две серьезные ошибки:
query_posts
должен быть перед циклом, а не внутри негоВообще не стоит использовать
query_posts
, если только вы не хотите что-то сломать на странице
Чтобы понять, почему не следует использовать query_posts
, а также когда и как использовать пользовательский запрос, ознакомьтесь с этой статьей, которую я написал некоторое время назад
Итак, чтобы исправить ваш код в шаблоне, мы будем использовать WP_Query
, а не query_posts
, и выполним запрос до начала цикла
Попробуйте что-то вроде этого:
<?php
/* Template Name: Страница песен
*
* Выбирается из выпадающего меню на экране редактирования страницы.
*/
?>
<?php get_header(); ?>
<div>
<?php
$args = array(
'post_type' => 'song'
);
$q = new WP_Query($args);
if ( $q->have_posts() ) {
while ( $q->have_posts() ) {
$q->the_post();
//Добавьте ваши теги шаблона, как показано ниже
the_title();
} // конец while
wp_reset_postdata();
} // конец if
?>
</div>
Также никогда не забывайте сбрасывать пользовательские запросы с помощью wp_reset_postdata()
, если вы использовали цикл или setup_postdata($post)

Большое спасибо за ответ. Используя приведенный выше код, я получаю только название записи, но мне нужно отображать заголовок записи с миниатюрой и небольшим содержанием. Возможно, мне нужно вызвать the_content()?

Да, вам следует добавить все, что вам нужно, это только основы. Для содержания вам нужно добавить the_content();
. Вам также нужно добавить всю вашу HTML-разметку. Этот раздел - дело личных предпочтений, и я не могу помочь вам с этим :-)

Для базового шаблона вы можете посмотреть встроенные темы, такие как twentyfifteen. Это должно дать вам хорошую отправную точку

Как я могу вызвать стандартные стили CSS для записи, чтобы применить их к этому пользовательскому типу записи? Я просто хочу, чтобы мои пользовательские записи отображались правильно, как обычные записи, с точки зрения стилей/CSS.

Просто скопируйте ваш цикл между while из вашего index.php и добавьте его в цикл здесь. Как я уже говорил, это раздел, зависящий от личных предпочтений, который вам, к сожалению, придется разбирать самостоятельно. Я не могу знать стили вашей темы. Именно поэтому этот раздел здесь не по теме :-)

Вам не нужно создавать никакие шаблоны, если вы просто хотите вывести список всех записей вашего пользовательского типа записей (CPT) в архиве:
Просто перейдите по адресу http://example.com/songs и WordPress автоматически отобразит все записи вашего CPT в стандартном архиве согласно Иерархии шаблонов. Замените example.com на ваш домен.
Возможно, вам потребуется пересохранить постоянные ссылки, чтобы обновить правила перезаписи URL, а также включить следующие параметры в функцию register_post_type:
'has_archive' => true,
'rewrite' => array( 'slug' => 'songs', 'with_front' => false ),
Если вы хотите создать пользовательскую страницу архива для вашего CPT, создайте новый файл с именем archive-song.php в корневой директории вашей темы.

Вы пробовали 'post_type'=> 'songs'
?
Ссылка: Запрос по типу записи
