Вопрос или проблема
Я унаследовал веб-сайт, на котором было значительное количество индивидуально настроенных файлов PHP. Я удалил многие из них, однако этот файл все еще кажется актуальным. Приведенный ниже код отображает 1 изображение наугад из определенного типа записи (галерея) в подвале сайта.
Перед тем, как я начал работать над сайтом, существовал только один тип записи. Теперь я добавил больше категорий галерей, но подвал отображает изображения из всех категорий. Как я могу изменить это, чтобы отобразить определенную категорию из типа записи галерея?
<?php query_posts('orderby=rand&showposts=1&post_type=gallery');
while ( have_posts() ) : the_post();?>
<script>
jQuery(document).ready(function(){
$voice="<?php $image = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), "medium" ); echo $image[0]; ?>";
jQuery('.footer-voice').attr('src', $voice);
});
</script>
<?php endwhile; ?>
Непосредственный ответ на ваш вопрос заключается в том, что вы можете просто добавить ID категории в вызов query_posts()
, например:
query_posts('orderby=rand&showposts=1&post_type=gallery&cat=10');
Слегка более длинный ответ заключается в том, что не рекомендуется использовать query_posts
в темах и плагинах. Дополнительная информация в документации здесь: https://developer.wordpress.org/reference/functions/query_posts/
Вам стоит воспользоваться возможностью изменить код, чтобы использовать get_posts
или WP_Query
, просто нужно поместить аргументы в массив вместо строки запроса.
Я предполагаю, что для вашего пользовательского типа записей зарегистрирована пользовательская таксономия. В таком случае вам нужно использовать параметр tax_query
для WP_Query
, чтобы получить записи из вашей пользовательской таксономии с определенным слагом термина.
Вот пример кода для получения записи пользовательского типа с пользовательским термином. Сначала идет вспомогательная функция, которую вы можете поместить в файл functions.php
. Строки ниже демонстрируют, как использовать эту функцию. Вам нужно обновить название таксономии, чтобы оно соответствовало актуальному, чтобы запрос работал.
Параметр category_name
связан с таксономией Категория, которая ассоциируется с типом записи Запись. Если ваш тип записи галереи также использует стандартные категории в качестве своей таксономии, то используйте category
в качестве taxonomy
ниже.
// в functions.php
function get_random_gallery_post_by_term( string $term ) {
// Настройка аргументов
$args = array(
'post_type' => 'gallery',
'post_status' => 'publish',
'posts_per_page' => 1,
'orderby' => 'rand',
'tax_query' => array(
// Запрос записи по пользовательскому термину таксономии
array(
// обновите your_gallery_taxonomy_name, чтобы он соответствовал вашему фактическому имени таксономии
// Вы можете найти имя таксономии в адресной строке вашего браузера, когда вы находитесь на странице администрирования таксономии
'taxonomy' => 'your_gallery_taxonomy_name',
'field' => 'slug',
'terms' => $term
)
),
);
// Выполнение запроса
$query = new WP_Query( $args );
// Возврат найденной записи или false, если не найдено
return $query->posts ? $query->posts[0] : false;
}
// в каком-либо файле шаблона
$gallery_post = get_random_gallery_post_by_term( 'my-gallery-category' );
// Сделайте что-нибудь с записью
if ( $gallery_post ) {
// Миниатюра, пустая строка, если миниатюра не найдена
echo get_the_post_thumbnail( $gallery_post->ID, 'thumbnail' );
// Содержимое
echo wp_kses_post( $gallery_post->post_content );
}
Ответ или решение
Для того чтобы изменить код и отобразить изображение из определенной категории постов типа gallery
, вам нужно внести поправки в функцию, которая отвечает за выборку случайных постов. В вашем случае вы можете использовать класс WP_Query
, который предоставляет больше возможностей и считается более правильным подходом, чем query_posts
.
Шаг 1: Обновление кода
Как упоминалось в описании, вы можете создать вспомогательную функцию в файле functions.php
вашей темы. Эта функция будет вызывать случайный пост из вашей желаемой категории. Вот код, который вы можете использовать:
// В файле functions.php
function get_random_gallery_post_by_term(string $term) {
// Параметры запроса
$args = array(
'post_type' => 'gallery',
'post_status' => 'publish',
'posts_per_page' => 1,
'orderby' => 'rand',
'tax_query' => array(
array(
'taxonomy' => 'your_gallery_taxonomy_name', // Замените на имя вашей таксономии
'field' => 'slug',
'terms' => $term
)
),
);
// Выполнение запроса
$query = new WP_Query($args);
// Возврат найденного поста или false, если не найден
return $query->posts ? $query->posts[0] : false;
}
Шаг 2: Использование функции
Теперь, чтобы отобразить случайный пост из определенной категории, вы можете использовать эту функцию в нужном вам шаблоне. Пример кода:
// В каком-то шаблонном файле
$gallery_post = get_random_gallery_post_by_term('my-gallery-category'); // Замените 'my-gallery-category' на вашу категорию
if ($gallery_post) {
// Отображение миниатюры поста
echo get_the_post_thumbnail($gallery_post->ID, 'medium'); // Укажите размер миниатюры, который вам нужен
// Отображение контента поста
echo wp_kses_post($gallery_post->post_content);
}
Объяснение кода
-
Параметры запросов: Мы указываем тип поста как
gallery
, статус поста какpublish
, и используемtax_query
для фильтрации постов по таксономии и термину. Не забудьте заменить'your_gallery_taxonomy_name'
на фактическое имя таксономии, которая используется для вашего поста типаgallery
. -
Функция
get_random_gallery_post_by_term
: Она возвращает случайный пост из заданной категории. Если ничего не найдено, возвращаетсяfalse
. -
Отображение поста: В шаблоне мы проверяем, был ли найден пост, и затем выводим его миниатюру и содержимое. Мы можем использовать
get_the_post_thumbnail
для получения изображения с указанным размером.
Заключение
Этот способ более безопасен и эффективен, чем использование query_posts
. Он позволяет вам иметь точный контроль над выводом и гарантирует, что вы не нарушаете глобальные настройки основного цикла WordPress. Если у вас есть дополнительные вопросы или вам нужна помощь с другими аспектами WordPress, пожалуйста, дайте знать!