почему не работает мой wp_query?

я хочу показать архив сообщений для типа записи post . поэтому я создал шаблон страницы и вставил следующие коды, но ничего не отображаю. <Сильный> почему? что мне делать?

<?php     $postnumcat = new wp_query (array(    'post_status' => 'publish',    'post_type' => 'post',    'cat' => '-1',    'posts_per_page' => '-1',    ));?><?php if($postnumcat->have_posts()) :while($postnumcat->have_posts()) : $postnumcat->the_post(); ?>    the_title();    the_content();<?php endwhile; endif; wp_reset_query(); ?>  

даже если я положил & lt;? php wp_reset_postdata (); ? & gt; после endause примерно так:

<?php endwhile; wp_reset_postdata(); endif; wp_reset_query(); ?>   

и даже примерно так:

<?php endwhile; wp_reset_postdata(); endif; ?> 

но оно тоже ничего не отображает: |

<

Ответы и комментарии:

Это ваш настоящий код? У вас нет никаких «элементов цикла» для вывода
Создан 12-12-2018 06:56 rudtek

Вам нужен этот пользовательский цикл? WordPress по умолчанию имеет архивы для каждого типа поста
Создан 12-12-2018 06:40 kero

@rudtek да, это актуально, но вместо "элемента цикла" вы можете рассмотреть the_title (). нет никаких проблем с этой частью
Создан 13-12-2018 06:25 sh.dehnavi

@kero даже для почты? Как я могу отобразить сообщения с типом сообщения по умолчанию (сообщение)?
Создан 13-12-2018 06:28 sh.dehnavi

Привет, мой друг, спасибо за помощь. в моей теме у меня есть index.php, который не включает в себя последние сообщения. Я хотел отобразить все сообщения на одной странице. но вы говорите, что я должен создать шаблон страницы без использования WP_Query и просто использовать цикл. затем зайдите в настройки и под чтение. я прав? Итак, что же такое слаг моего почтового архива? Учтите, что когда мы добавляем новый тип записи со слагом (например, book), по умолчанию все записи этого типа будут отображаться в yoursite.com/book, но это не относится к сообщениям для типа записи. сообщение
Создан 13-12-2018 07:22 sh.dehnavi

Здесь есть несколько вопросов, начиная с первой части:
<? PHP
    $ postnumcat = new wp_query (массив (
    'post_status' => 'publish',
    'post_type' => 'post',
    'cat' => '-1',
    'posts_per_page' => '-1',
    ));

Во-первых, wp_query - это ошибка, это WP_Query
Некоторые общие замечания тоже:

Установка posts_per_page в -1 плохо влияет на производительность. Даже если вы не ожидаете, что будет много постов, установите вместо этого слишком большое число, но никогда не говорите -1, поскольку это означает неограниченное количество, даже если ваш сервер не может справиться с этим. Используйте нумерацию страниц, если результатов слишком много
Установка cat в -1 указывает WP исключить категорию с термином -1, что может быть очень медленным и дорогим. Избегайте подобных запросов любой ценой

Затем по какой-то причине есть закрывающий тег PHP, пробел и символ новой строки, затем открывающий тег PHP, это создаст нежелательные пробелы:
?>

<? php if ($ postnumcat-> have_posts ()):

Тогда у нас есть цикл, который не был правильно отформатирован, но обратите внимание, что внутри цикла ничего нет, все, что вы собираетесь получить, это серия элементов . Код должен на самом деле отображать вещи
while ($ postnumcat-> have_posts ()): $ postnumcat-> the_post (); ?>



<? php endween; ENDIF; wp_reset_query (); ?>

И наконец, wp_reset_query предназначен для использования с query_posts, функцией, которую вы никогда не должны использовать. Черный список wp_reset_query и никогда не используйте его, нет никаких оснований для его использования.
Вместо этого, давайте вернемся к исходной задаче:

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

WordPress уже делает это! По умолчанию это ваша домашняя страница (home.php / archive.php / index.php). Но если вы хотите поместить этот архив на другую страницу, используя шаблон страницы, тогда отбрасывать основной запрос и использовать свой собственный - ужасный способ сделать это.
Представьте, что вы отправили своего помощника, чтобы купить вам кофе каждое утро. За исключением того, что она вернулась из 40-минутной поездки туда и обратно, вы сказали им: «Нет, я хочу горячий шоколад». Каждое утро вы заставляете их выходить дважды. Тогда клиент жалуется, что ваш бизнес идет медленно и не работает хорошо.
Кроме того, вы только что потеряли много преимуществ WP, например, разбиение на страницы прервется, и вам нужно будет повторно внедрить его, чтобы он снова заработал.
Вместо этого создайте страницу под названием «Архив сообщений», перейдите в настройки и, прочитав, установите ее как страницу своих сообщений:

Затем создайте frontpage.php и home.php в своей теме, чтобы вы могли стилизовать их обоих. Используйте обычный, стандартный, основной пост цикл в обоих.
Для справки
Это стандартный основной цикл:
if (have_posts ()) {
    while (have_posts ()) {
        the_post ();
        the_title ();
        содержимое();
    }
} еще {
    // Сообщений не найдено
}

Это пользовательский пост-запрос:
$ q = новый WP_Query ([
    // Аргументы идут сюда
]);
if ($ q-> have_posts ()) {
    while ($ q-> have_posts ()) {
        $ Q-> the_post ();
        the_title ();
        содержимое();
    }
    wp_reset_postdata ();
} еще {
    // Сообщений не найдено
}

И это то, что вы должны делать, если вы хотите изменить, какие сообщения WordPress извлекает, сообщая об этом до того, как он их получит:
function my_home_category ($ query) {
    if ($ query-> is_home () && $ query-> is_main_query ()) {
        // показывать только сообщения из категории 123 на главной странице
        $ query-> set ('cat', '123');
    }
}
add_action ('pre_get_posts', 'my_home_category');

И, наконец, поместите каждую вещь в отдельную строку и сделайте отступ. Существует множество бесплатных редакторов, которые автоматически сделают это за вас, например, Sublime Text, VS Code, Atom и т. Д.
Создан 13-12-2018 02:08