Wordpress PHP: объединение сообщений с пользовательскими типами сообщений в архиве категорий - PullRequest
0 голосов
/ 23 января 2020

У меня есть сайт с постами Wordpress и пользовательским типом постов (molinks). У меня есть сообщение l oop (управляемое плагином), в котором одинаково отображаются сообщения и сообщения. Проблема, которую я пытаюсь решить, состоит в том, что когда пользователь нажимает на теги категории, чтобы увидеть страницу архива категории, отображаются только сообщения с этой категорией (не molinks).

Чтобы исправить это, я использовал следующий код, однако он работает только при наличии сообщения с категорией. т. е. если сообщение и Molink имеют категорию A, то оба будут отображаться на странице архива категории A. Но если только у molink есть категория A (а не должность), то molink с этой категорией не отображается. В этом случае вызывается шаблон none (строка 2-я снизу).

Есть идеи? Спасибо

    <?php
    /* Start the Loop */
    while ( have_posts() ) : the_post();
    $args = array(
        'post_type' => array('molink', 'post'),
    'category__in' => get_queried_object_id(),
        'showposts' => 100
            );
    $custom_posts = new WP_Query( $args );
    if ( $custom_posts->have_posts() ):
        while ( $custom_posts->have_posts() ) : $custom_posts->the_post();?><br />
    <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link: <?php the_title(); ?>"><br />
    <?php the_title(); ?></a>, <br />
    <?php the_time('d M Y'); ?><br />   
    <?php endwhile; else: ?><br />
        <p><?php _e('No posts.'); ?></p><br />
    <br />
        <?php endif; ?> <br />
    <?php
    endwhile;
?>

    <?php else : ?>
    <?php get_template_part( 'content', 'none' ); ?>
    <?php endif; ?>

1 Ответ

0 голосов
/ 23 января 2020

Основная проблема, с которой вы столкнулись, заключается в том, что вы выполняете второй запрос $customer_posts, только если исходный запрос WordPress (который проверяет только обычный post_type) имеет результаты.

Итак, что произойдет, это будет никогда не звонил, когда у вас есть только molink в вашей категории A.

На мой взгляд, лучший способ обойти это - использовать pre_get_posts WordPress-хук, который вы можете найти более подробно о Здесь .

Запускается после создания объекта переменной запроса, но до запуска фактического запроса.

Вы должны создать код, который будет выглядеть как-то как в следующем примере:

// Somewhere around functions.php
function add_molinks_to_post_archives ( $query ) {

    // Only apply when is main category, inside inside a category page
    if ( is_category() && $query->is_main_query() ) {
        $query->set( 'post_type', array( 'post', 'molink' ) );
    }
}

add_action ( 'pre_get_posts', 'add_molinks_to_post_archives' );

И затем вы можете просто пропустить пользовательский код внутри самого l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...