WP Query с категориями показывает только один пост и игнорирует категорию.

Вопрос или проблема

Я пытаюсь создать следующий макет с помощью WordPress: https://i.sstatic.net/wyYS1.jpg

Я создал пользовательский тип записи и две категории (общая и инструкции по заполнению). Я использовал плагин ACF для создания пользовательских полей для типа записи: https://i.sstatic.net/xBn3S.jpg

Однако, когда я создаю цикл, я не могу заставить его показать записи только для общей категории, он показывает любые категории. Также, он показывает только одну запись (последнюю), я хочу, чтобы он показывал все записи для одной категории.

        <ul class="pdfLinks">
                <?php

                    //Аргументы
                    $args = array(
                        'posts_per_page' => 50,
                        'post_type' => 'documents',
                        'category_name' => 'general'
                    );

                    //Запрос
                    $genral_documents = new WP_Query ( $args ); ?>

                <?php

                    //Если у нас есть записи...
                    if (the_field ('title')) :
                        while(the_field('title')) :
                            the_field('title');
                    endwhile;
                    endif;
                ?>
                    <?php
                        $pdf1 = get_field('pdf_1');
                    ?>
                        <a class="download_button" target="_blank" href="https://wordpress.stackexchange.com/questions/292779/<?php echo $pdf1["url']; ?>">
                            <li>
                                Скачать файл
                            </li>
                        </a>
                </ul> 

Я очень нов в кодировании для WordPress, поэтому не уверен, что делаю не так. Спасибо за вашу помощь 🙂

Попробуйте это:

`

                $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;

                $genral_args = array(
                    'posts_per_page' => '50',
                    'post_type' => 'documents',
                    'cat' => 'your-category-id',
                    'paged' => $paged
                );

                $genral_query = new WP_Query( $genral_args );

                while ( $genral_query->have_posts() ) : $genral_query->the_post(); ?>

            <?php

                //Если у нас есть записи...
                if (the_field ('title')) :
                    while(the_field('title')) :
                        the_field('title');
                endwhile;
                endif;
            ?>
                <?php
                    $pdf1 = get_field('pdf_1');
                ?>
                    <a class="download_button" target="_blank" href="https://wordpress.stackexchange.com/questions/292779/<?php echo $pdf1["url']; ?>">
                        <li>
                            Скачать файл
                        </li>
                    </a>

                    <?php endwhile; wp_reset_postdata(); ?>
            </ul> `

(измените “your-category-id” на id, или если вы хотите выбрать несколько категорий, используйте так: 'cat' => 'your-category-id, your-category-id2')

Попробуйте это:

<?php
$taxonomy="category";
$postData = new WP_Query(
  array(
    'post_type' => 'documents',
    'posts_per_page'=> 50,
    'post_status' => 'publish',
    'tax_query' => array(
      array(
        'taxonomy' => $taxonomy, // здесь ваше имя пользовательской таксономии
        'field' => 'slug',  // вы можете указать поле, такое как id, имя и slug.
        'terms' => 'general' // вы можете указать id, имя и slug категории
      )
  ) 
));
if($postData->have_posts()):
  while ($postData->have_posts()): $postData->the_post();
    echo the_title()."<br>";
    $pdf1 = get_field('pdf_1'); ?>

    <a class="download_button" target="_blank" href="https://wordpress.stackexchange.com/questions/292779/<?php echo $pdf1["url']; ?>">
      <li>
          Скачать файл
      </li>
    </a>
  <?php endwhile;
  wp_reset_postdata();
endif; ?>

Спасибо

.

Ответ или решение

Решение проблемы с WP Query для категорий в WordPress

Введение

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

Проблема

  1. Ваш код возвращает только одну последнюю запись, вместо всех записей в категории «general».
  2. Запрос игнорирует фильтрацию по категории, и это должна быть позиция «general».

Возможные причины проблемы

  • Неправильное использование функции the_field.
  • Неправильный параметр для фильтрации по категориям.
  • Недостаточные настройки запроса, которые могут ограничивать количество выводимых записей.

Решение

Для решения данной проблемы, вам необходимо изменить способ, которым вы построили свой запрос и цикл. Мы будем использовать параметр tax_query, чтобы выбрать необходимые записи по категории и обеспечить правильный вывод нескольких постов.

Шаг за шагом

  1. Корректировка WP_Query:
    Используйте tax_query для уточнения фильтрации по категориям.

  2. Построение цикла:
    Важно правильно использовать функции WordPress для вывода данных.

Вот исправленный код, который должен устранить ваши проблемы:

<ul class="pdfLinks">
    <?php
    // Аргументы запроса
    $args = array(
        'posts_per_page' => 50,
        'post_type'      => 'documents',
        'post_status'    => 'publish',
        'tax_query'      => array(
            array(
                'taxonomy' => 'category', // Здесь укажите вашу таксономию, например, 'category'
                'field'    => 'slug',     // Используем slug для фильтрации
                'terms'    => 'general'    // Указываем категорию 'general'
            )
        )
    );

    // Запрос
    $general_documents = new WP_Query($args);

    // Проверка наличия постов
    if ($general_documents->have_posts()) :
        while ($general_documents->have_posts()) : $general_documents->the_post(); 
            // Вывод заголовка
            the_title('<h2>', '</h2>');

            // Получение пользовательского поля
            $pdf1 = get_field('pdf_1'); 
            if ($pdf1) : ?>
                <a class="download_button" target="_blank" href="<?php echo esc_url($pdf1['url']); ?>">
                    <li>Download File</li>
                </a>
            <?php endif; 
        endwhile; 
        // Сброс данных поста
        wp_reset_postdata(); 
    else: 
        echo '<p>No documents found.</p>'; 
    endif; 
    ?>
</ul>

Объяснение решения:

  • tax_query: Этот параметр позволяет вам фильтровать записи по терминам таксономии, что решает вашу проблему с выбором постов только категории «general».
  • Цикл: Используйте have_posts и the_post, чтобы корректно итерироваться по постам.
  • esc_url: Эта функция обеспечивает безопасность ссылок, обработая URL перед выводом.
  • Сброс данных: После завершения цикла с помощью wp_reset_postdata() вы очищаете глобальные данные поста, что предотвращает возможные конфликты.

Заключение

Правильная настройка WP_Query и использование функций WordPress позволят вам избежать проблем при работе с пользовательскими типами записей и таксономиями. Следуя приведенным рекомендациям, вы сможете успешно выводить все записи, относящиеся к заданной категории, и полностью реализовать вашу задумку на сайте. Надеюсь, это решит ваши проблемы!

Оцените материал
Добавить комментарий

Капча загружается...