Не отображаются записи пользовательского типа постов

10 февр. 2015 г., 16:41:38
Просмотры: 2.49K
Голосов: 1

Я создал пользовательский шаблон и пытаюсь получить записи типа "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-код.

5
Комментарии

Это часть архивной страницы для пользовательского типа записи?

Manny Fleurmond Manny Fleurmond
10 февр. 2015 г. 17:36:52

Я хочу отобразить все записи пользовательского типа "songs". Где вы хотите отобразить эти записи?

Brad Dalton Brad Dalton
10 февр. 2015 г. 19:12:14

@PieterGoosen - Да, я принял.

rahul bhatt rahul bhatt
11 февр. 2015 г. 15:34:11

@BradDalton - Я создал пользовательский шаблон. В коде этого шаблона я вызываю header, footer и выше цикла для получения записей пользовательского типа, но на странице отображаются только header и footer :(

rahul bhatt rahul bhatt
11 февр. 2015 г. 15:35:09

@MannyFleurmond - Нет...

rahul bhatt rahul bhatt
11 февр. 2015 г. 15:38:32
Все ответы на вопрос 5
6

В вашем коде есть две серьезные ошибки:

  • 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)

11 февр. 2015 г. 16:01:06
Комментарии

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

rahul bhatt rahul bhatt
11 февр. 2015 г. 16:14:38

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

Pieter Goosen Pieter Goosen
11 февр. 2015 г. 16:16:46

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

Pieter Goosen Pieter Goosen
11 февр. 2015 г. 16:17:46

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

rahul bhatt rahul bhatt
12 февр. 2015 г. 10:44:08

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

Pieter Goosen Pieter Goosen
12 февр. 2015 г. 10:57:06

Хорошо...Попробую..:)

rahul bhatt rahul bhatt
12 февр. 2015 г. 14:12:47
Показать остальные 1 комментариев
0

Вам не нужно создавать никакие шаблоны, если вы просто хотите вывести список всех записей вашего пользовательского типа записей (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 в корневой директории вашей темы.

11 февр. 2015 г. 17:32:37
0

Перейдите в Настройки > Постоянные ссылки и просто нажмите кнопку "Сохранить изменения". Теперь обновите страницу.

11 нояб. 2020 г. 12:27:17
2
-1

Или даже

query_posts( 'post_type=песня');
10 февр. 2015 г. 22:37:42
Комментарии

Можете добавить больше объяснений, почему это сработает или почему это является ответом на вопрос?

Howdy_McGee Howdy_McGee
10 февр. 2015 г. 22:54:37

Я просто имел в виду попробовать 'post_type=song' вместо 'post_type=songs' Извините за путаницу

Mike Mike
10 февр. 2015 г. 23:03:45
0
-2

Вы пробовали 'post_type'=> 'songs'?

Ссылка: Запрос по типу записи

10 февр. 2015 г. 17:13:26