WordPress PHP:将帖子与类别存档上的自定义帖子类型相结合



我有一个包含Wordpress帖子和自定义帖子类型(molinks(的网站。我有一个帖子循环(插件驱动(,它以相同的方式显示帖子和 molinks。我试图解决的问题是,当用户单击类别标签以查看类别存档页面时,仅显示具有该类别的帖子(而不是molinks(。

为了解决这个问题,我使用了以下代码,但是它仅在有带有类别的帖子时才有效。 即,如果帖子和molink具有A类,则两者都将显示在A类存档页面上。但是,如果只有 molink 具有类别 A(而不是帖子(,则不会显示具有该类别的 molink。在这种情况下,模板"none"被称为(倒数第二行(。

有什么想法吗?谢谢

<?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; ?>

您遇到的主要问题是,仅当原始WordPress查询(仅检查常规post_type(具有结果时,您才会执行第二个$customer_posts查询。

因此,当您在A类中只有molink时,它将永远不会被调用。

在我看来,最好的方法是使用pre_get_postsWordPress钩子,你可以在这里找到更多细节。

在创建查询变量对象之后,但在运行实际查询之前触发。

应创建类似于以下示例的代码:

// 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' );

然后,您可以跳过循环本身中的自定义代码。

最新更新