Как показать похожие записи, определив текущую категорию?

5 февр. 2012 г., 18:22:25
Просмотры: 117K
Голосов: 13

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

2
Комментарии

возможный дубликат Как выводить похожие записи из той же категории?

kaiser kaiser
5 февр. 2012 г. 19:21:40

Ответит ли это на ваш вопрос? Как отображать связанные записи из той же категории?

Jesse Nickles Jesse Nickles
3 февр. 2024 г. 07:19:00
Все ответы на вопрос 3
12
34

Вопрос уже был задан, и ответ также был опубликован,

Как вывести связанные записи из той же категории?

Добавьте этот код в ваш файл single.php после цикла там, где вы хотите показать связанные записи,

<?php

$related = get_posts( array( 'category__in' => wp_get_post_categories($post->ID), 'numberposts' => 5, 'post__not_in' => array($post->ID) ) );
if( $related ) foreach( $related as $post ) {
setup_postdata($post); ?>
 <ul> 
        <li>
        <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a>
            <?php the_content('Читать далее &raquo;'); ?>
        </li>
    </ul>   
<?php }
wp_reset_postdata(); ?>

Этот код выведет связанные записи из той же категории с заголовком и отрывком текста. Однако, если вы хотите, чтобы код отображал только заголовки связанных записей, удалите эту строку:

<?php the_content('Читать далее &raquo;'); ?>
5 февр. 2012 г. 18:51:25
Комментарии

Извините, я новичок в WordPress и PHP. Если вы не против, не могли бы вы подсказать, как вставить этот код в мой single.php??

Felix Felix
5 февр. 2012 г. 19:01:19

перечитайте мой ответ, я добавил несколько дополнительных деталей (ПРОТЕСТИРОВАНО)

Sufiyan Ghori Sufiyan Ghori
5 февр. 2012 г. 19:15:26

Может быть, можно закрыть вопрос как дубликат?

kaiser kaiser
5 февр. 2012 г. 19:22:04

@Xufyan этот код показывает мне следующую ошибку, когда я использовал его после комментария Fatal error: Call to undefined function odd_title()

Felix Felix
5 февр. 2012 г. 19:30:50

извините, замените 'ODD' на 'the' в приведенном выше коде

Sufiyan Ghori Sufiyan Ghori
5 февр. 2012 г. 19:34:25

@Xufyan Если я уберу строку, вызывающую ошибку <?php ODD_title(30); ?>, я не получаю постов, просто пять маркеров без постов или заголовков

Felix Felix
5 февр. 2012 г. 19:37:17

ошибка исправлена в коде, и теперь он работает идеально (проверено), скопируйте изменённый код из моего ответа

Sufiyan Ghori Sufiyan Ghori
5 февр. 2012 г. 19:39:16

@Xufyan Но теперь отображается только заголовок записи с постоянной ссылкой :\ Есть идеи??

Felix Felix
5 февр. 2012 г. 19:42:45

это означает, что вы удалили эту строку кода: <?php the_excerpt('Read the rest of this entry »'); ?>, верните её обратно на место

Sufiyan Ghori Sufiyan Ghori
5 февр. 2012 г. 19:50:41

@Xufyan нет, я не убирал эту строку. Попробовал снова, но заголовок всё равно отображается с постоянной ссылкой.

Felix Felix
5 февр. 2012 г. 19:53:19

давайте продолжим это обсуждение в чате

Felix Felix
5 февр. 2012 г. 19:53:37

Это намного лучше, чем ответ, на который вы ссылались

Claudiu Creanga Claudiu Creanga
4 сент. 2014 г. 04:09:48
Показать остальные 7 комментариев
1

Вот еще один чистый и очень гибкий вариант:

Поместите этот код в файл functions.php

function example_cats_related_post() {

    $post_id = get_the_ID();
    $cat_ids = array();
    $categories = get_the_category( $post_id );

    if(!empty($categories) && !is_wp_error($categories)):
        foreach ($categories as $category):
            array_push($cat_ids, $category->term_id);
        endforeach;
    endif;

    $current_post_type = get_post_type($post_id);

    $query_args = array( 
        'category__in'   => $cat_ids,
        'post_type'      => $current_post_type,
        'post__not_in'    => array($post_id),
        'posts_per_page'  => '3',
     );

    $related_cats_post = new WP_Query( $query_args );

    if($related_cats_post->have_posts()):
         while($related_cats_post->have_posts()): $related_cats_post->the_post(); ?>
            <ul>
                <li>
                    <a href="<?php the_permalink(); ?>">
                        <?php the_title(); ?>
                    </a>
                    <?php the_content(); ?>
                </li>
            </ul>
        <?php endwhile;

        // Восстановление оригинальных данных поста
        wp_reset_postdata();
     endif;

}

Теперь вы можете просто вызвать функцию в любом месте вашего сайта с помощью:

<?php example_cats_related_post() ?>

Вы можете удалить элементы списка или стилизовать их по своему усмотрению.

2 июл. 2018 г. 14:30:01
Комментарии

Я считаю, что это решение лучшее, потому что оно переиспользуемо. Добавьте функцию в functions.php, а затем вызывайте её в любом месте активной темы.

Я попробовал это сам, и оно работает.

risingPhoenix1979 risingPhoenix1979
13 мая 2022 г. 01:55:29
0

Это продвинутый пример для разработчиков. Он поддерживает пользовательские типы записей и таксономии, включая сопоставление по нескольким таксономиям.

// $post указывает на экземпляр WP_Post текущей записи.

$query = new WP_Query(
    [
        'post_type'      => $relatedPostType,
        'posts_per_page' => 6,
        'tax_query'      => buildTaxonomyForRelatedPosts($post),
        'post__not_in'   => [$post->ID],
    ]
);

// Массив связанных записей
$relatedPosts = $query->get_posts();

function buildTaxonomyForRelatedPosts(WP_Post $post) {
    switch ($post->post_type) {
        case 'post':
            $taxonomies = ['category', 'post_tag'];
            break;
        case 'news':
            $taxonomies = ['newscategory', 'newstags'];
            break;
        default:
            return [];
    }

    $taxQuery = [
        'relation' => 'OR',
    ];

    foreach ($taxonomies as $taxonomy) {
        $taxQuery[] = [
            'taxonomy' => $taxonomy,
            'field'    => 'slug',
            'terms'    => array_filter(wp_get_object_terms($post->ID, $taxonomy, ['fields' => 'slugs']), function($termSlug) {
                return strtolower($termSlug) !== 'uncategorized';
            }),
        ];
    }

    return $taxQuery;
}

Функция buildTaxonomyForRelatedPosts по сути строит массив со следующей структурой:

'tax_query' => [
    'relation' => 'OR',
    [
        'taxonomy' => 'movie_genre',
        'field'    => 'slug',
        'terms'    => ['action', 'comedy', 'drama'],
    ],
    [
        'taxonomy' => 'actor',
        'field'    => 'slug',
        'terms'    => ['foo', 'bar', 'baz'],
    ],
];

https://developer.wordpress.org/reference/classes/wp_query/#taxonomy-parameters

16 июн. 2021 г. 03:50:40