Отображение изображения поста по категории типа контента

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

Я унаследовал веб-сайт, на котором было значительное количество индивидуально настроенных файлов 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);
}

Объяснение кода

  1. Параметры запросов: Мы указываем тип поста как gallery, статус поста как publish, и используем tax_query для фильтрации постов по таксономии и термину. Не забудьте заменить 'your_gallery_taxonomy_name' на фактическое имя таксономии, которая используется для вашего поста типа gallery.

  2. Функция get_random_gallery_post_by_term: Она возвращает случайный пост из заданной категории. Если ничего не найдено, возвращается false.

  3. Отображение поста: В шаблоне мы проверяем, был ли найден пост, и затем выводим его миниатюру и содержимое. Мы можем использовать get_the_post_thumbnail для получения изображения с указанным размером.

Заключение

Этот способ более безопасен и эффективен, чем использование query_posts. Он позволяет вам иметь точный контроль над выводом и гарантирует, что вы не нарушаете глобальные настройки основного цикла WordPress. Если у вас есть дополнительные вопросы или вам нужна помощь с другими аспектами WordPress, пожалуйста, дайте знать!

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

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