Вопрос или проблема
Я пытаюсь создать следующий макет с помощью 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
) для пользовательского типа записей не возвращает ожидаемые результаты, а именно, возвращает только одну запись, игнорируя выбранную категорию.
Проблема
- Ваш код возвращает только одну последнюю запись, вместо всех записей в категории «general».
- Запрос игнорирует фильтрацию по категории, и это должна быть позиция «general».
Возможные причины проблемы
- Неправильное использование функции
the_field
. - Неправильный параметр для фильтрации по категориям.
- Недостаточные настройки запроса, которые могут ограничивать количество выводимых записей.
Решение
Для решения данной проблемы, вам необходимо изменить способ, которым вы построили свой запрос и цикл. Мы будем использовать параметр tax_query
, чтобы выбрать необходимые записи по категории и обеспечить правильный вывод нескольких постов.
Шаг за шагом
-
Корректировка WP_Query:
Используйтеtax_query
для уточнения фильтрации по категориям. -
Построение цикла:
Важно правильно использовать функции 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 позволят вам избежать проблем при работе с пользовательскими типами записей и таксономиями. Следуя приведенным рекомендациям, вы сможете успешно выводить все записи, относящиеся к заданной категории, и полностью реализовать вашу задумку на сайте. Надеюсь, это решит ваши проблемы!