在一个归档页面上将自定义分类帖子与默认帖子相结合

时间:2014-08-14 作者:Nsokyi

我正在尝试将自定义存档帖子和默认帖子合并到一个我管理的存档页面上。。。有点像,但我无法使用pagenavi插件或主题默认分页代码进行分页。我尝试过使用paged,但如果有任何显示,我不确定它是否会将两个类别一起分页,或者只分页一个类别。

我需要组合两个类别,一个是自定义分类法,另一个是默认分类法,然后对它们进行不同的样式设置,在页面上有一组数量的组合帖子,并且能够将它们放在9篇帖子的页面中。

我使用的代码:

            <?php if (is_category()) { ?>
                <h1 class="page-title">
                <span><?php _e(); ?></span> <?php single_cat_title(); ?>
                </h1>
            <?php } ?>
                <ul>
                    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
                    <?php get_template_part( \'partials/loop\', \'archive\' ); ?>
                    <?php endwhile; ?>
                </ul>

            <?php rewind_posts(); ?>

            <?php
            $args = array(
            \'post_type\' => \'events\',
            \'posts_per_page\' => \'6\',
            \'paged\' => $paged,
            \'tax_query\' => array(
            array(
            \'taxonomy\' => \'event_cat\',\'events\',
            \'field\' => \'slug\',
            \'terms\' => \'events\',\'upcoming-events\'
            )
            )
            );?>
            <?php $the_query = new WP_Query( $args ); ?>
                <ul>
                    <?php if ( $the_query->have_posts() ) :
                    while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
                    <?php get_template_part( \'partials/loop\', \'archive-events\' ); ?>
                    <?php endwhile; ?>
                </ul>

            <?php wp_pagenavi(); ?>

            <?php else : ?>
            <?php get_template_part( \'partials/content\', \'missing\' ); ?>
            <?php endif; ?>
将上述内容更改为:

                        <?php if (is_category()) { ?>

                        <h1 class="page-title">
                            <span><?php _e(); ?></span> <?php single_cat_title(); ?>
                        </h1>
                    <?php } ?>

                        <ul class="small-block-grid-1 medium-block-grid-2 large-block-grid-3">

                            <?php $query = new WP_Query( array( \'cat\' => \'7\' )); ?>


                            <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
                            <?php get_template_part( \'partials/loop\', \'archive\' ); ?>
                            <?php endwhile; ?>
                        </ul>

                        <?php else : ?>
                        <?php get_template_part( \'partials/content\', \'missing\' ); ?>
                        <?php endif; ?>

                        <?php rewind_posts(); ?>

                 <?php

                $args = array(
                \'post_type\' => \'events\',
                \'posts_per_page\' => \'3\',
                \'paged\' => get_query_var( \'paged\' ),
                \'tax_query\' => array(
                array(
                \'taxonomy\' => \'event_cat\',
                \'field\' => \'slug\',
                \'terms\' => \'events\'
                )
                )
                );?>

                <?php $the_query = new WP_Query( $args ); ?>

                        <ul class="small-block-grid-1 medium-block-grid-2 large-block-grid-3">
                            <?php if ( $the_query->have_posts() ) :
                            while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
                            <?php get_template_part( \'partials/loop\', \'archive-events\' ); ?>
                            <?php endwhile; ?>
                        </ul>
                        <?php if (function_exists(\'joints_page_navi\')) { ?>
                        <?php wp_pagenavi(); ?>
                        <?php } else { ?>
                        <nav class="wp-prev-next">
                            <ul class="clearfix">
                                <li class="prev-link"><?php next_posts_link(__(\'&laquo; Older Entries\', "jointstheme")) ?></li>
                                <li class="next-link"><?php previous_posts_link(__(\'Newer Entries &raquo;\', "jointstheme")) ?></li>
                            </ul>
                        </nav>
                        <?php } ?>

                        <?php endif; ?>

1 个回复
SO网友:Pieter Goosen

我建议您放弃所有现有内容,并返回归档页面上的默认循环。自定义查询在存档页面上总是很麻烦。

使用pre_get_posts 在执行主查询之前更改查询变量。这样,您就不会有任何不必要的查询和分页问题。您将使用此处的税务查询来包括您的两个术语。中使用的所有可用参数pre_get_posts, 看见WP_Query

这是我的想法

如上所述,返回归档页面中的默认循环

在您的函数中。php,使用pre_get_posts 和条件检查is_archive(). 此代码将向存档页面添加两个所需的术语

function custom_archive_query( $query ) {
    if ( !is_admin() && $query->is_archive() && $query->is_main_query() ) {
        $query->set( \'posts_per_page\', 9 );
        $query->set( \'post_type\', \'any\' );
        $tax_query = array(
            \'relation\' => \'OR\',
            array(
                \'taxonomy\' => \'event_cat\',
                \'field\'    => \'slug\',
                \'terms\'    => \'events\',
            ),
            array(
                \'taxonomy\' => \'category\',
                \'field\'    => \'term_id\',
                \'terms\'    => \'7\',
            ),
        );
         $query->set( \'tax_query\', $tax_query );

    }
}
add_action( \'pre_get_posts\', \'custom_archive_query\' );
至于样式问题,在循环内的存档页上,使用两个条件,has_category()has_term 检查一篇文章属于哪个术语,并根据该术语设置样式

if( has_category( 7 ) ) {
    // DO SOMETHING FOR CATEGORY
}elseif( has_term( \'events\', \'event_cat\' ) ) {
    // DO SOMETHING FOR TERM event_cat
}
请注意:这些都未经测试

EDIT

您可以使用WP_Query

结束

相关推荐

显示Archives.php中的所有自定义帖子类型

我该怎么做?archive.php 只有以下内容:wp_get_archives(\'type=monthly\'); 以及wp_get_archives() 没有显示所有帖子类型的参数。我也认为archive-[post_type].php 不是我要找的,因为我希望所有帖子类型都显示在一个归档页面中。谢谢W

在一个归档页面上将自定义分类帖子与默认帖子相结合 - 小码农CODE - 行之有效找到问题解决它

在一个归档页面上将自定义分类帖子与默认帖子相结合

时间:2014-08-14 作者:Nsokyi

我正在尝试将自定义存档帖子和默认帖子合并到一个我管理的存档页面上。。。有点像,但我无法使用pagenavi插件或主题默认分页代码进行分页。我尝试过使用paged,但如果有任何显示,我不确定它是否会将两个类别一起分页,或者只分页一个类别。

我需要组合两个类别,一个是自定义分类法,另一个是默认分类法,然后对它们进行不同的样式设置,在页面上有一组数量的组合帖子,并且能够将它们放在9篇帖子的页面中。

我使用的代码:

            <?php if (is_category()) { ?>
                <h1 class="page-title">
                <span><?php _e(); ?></span> <?php single_cat_title(); ?>
                </h1>
            <?php } ?>
                <ul>
                    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
                    <?php get_template_part( \'partials/loop\', \'archive\' ); ?>
                    <?php endwhile; ?>
                </ul>

            <?php rewind_posts(); ?>

            <?php
            $args = array(
            \'post_type\' => \'events\',
            \'posts_per_page\' => \'6\',
            \'paged\' => $paged,
            \'tax_query\' => array(
            array(
            \'taxonomy\' => \'event_cat\',\'events\',
            \'field\' => \'slug\',
            \'terms\' => \'events\',\'upcoming-events\'
            )
            )
            );?>
            <?php $the_query = new WP_Query( $args ); ?>
                <ul>
                    <?php if ( $the_query->have_posts() ) :
                    while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
                    <?php get_template_part( \'partials/loop\', \'archive-events\' ); ?>
                    <?php endwhile; ?>
                </ul>

            <?php wp_pagenavi(); ?>

            <?php else : ?>
            <?php get_template_part( \'partials/content\', \'missing\' ); ?>
            <?php endif; ?>
将上述内容更改为:

                        <?php if (is_category()) { ?>

                        <h1 class="page-title">
                            <span><?php _e(); ?></span> <?php single_cat_title(); ?>
                        </h1>
                    <?php } ?>

                        <ul class="small-block-grid-1 medium-block-grid-2 large-block-grid-3">

                            <?php $query = new WP_Query( array( \'cat\' => \'7\' )); ?>


                            <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
                            <?php get_template_part( \'partials/loop\', \'archive\' ); ?>
                            <?php endwhile; ?>
                        </ul>

                        <?php else : ?>
                        <?php get_template_part( \'partials/content\', \'missing\' ); ?>
                        <?php endif; ?>

                        <?php rewind_posts(); ?>

                 <?php

                $args = array(
                \'post_type\' => \'events\',
                \'posts_per_page\' => \'3\',
                \'paged\' => get_query_var( \'paged\' ),
                \'tax_query\' => array(
                array(
                \'taxonomy\' => \'event_cat\',
                \'field\' => \'slug\',
                \'terms\' => \'events\'
                )
                )
                );?>

                <?php $the_query = new WP_Query( $args ); ?>

                        <ul class="small-block-grid-1 medium-block-grid-2 large-block-grid-3">
                            <?php if ( $the_query->have_posts() ) :
                            while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
                            <?php get_template_part( \'partials/loop\', \'archive-events\' ); ?>
                            <?php endwhile; ?>
                        </ul>
                        <?php if (function_exists(\'joints_page_navi\')) { ?>
                        <?php wp_pagenavi(); ?>
                        <?php } else { ?>
                        <nav class="wp-prev-next">
                            <ul class="clearfix">
                                <li class="prev-link"><?php next_posts_link(__(\'&laquo; Older Entries\', "jointstheme")) ?></li>
                                <li class="next-link"><?php previous_posts_link(__(\'Newer Entries &raquo;\', "jointstheme")) ?></li>
                            </ul>
                        </nav>
                        <?php } ?>

                        <?php endif; ?>

1 个回复
SO网友:Pieter Goosen

我建议您放弃所有现有内容,并返回归档页面上的默认循环。自定义查询在存档页面上总是很麻烦。

使用pre_get_posts 在执行主查询之前更改查询变量。这样,您就不会有任何不必要的查询和分页问题。您将使用此处的税务查询来包括您的两个术语。中使用的所有可用参数pre_get_posts, 看见WP_Query

这是我的想法

如上所述,返回归档页面中的默认循环

在您的函数中。php,使用pre_get_posts 和条件检查is_archive(). 此代码将向存档页面添加两个所需的术语

function custom_archive_query( $query ) {
    if ( !is_admin() && $query->is_archive() && $query->is_main_query() ) {
        $query->set( \'posts_per_page\', 9 );
        $query->set( \'post_type\', \'any\' );
        $tax_query = array(
            \'relation\' => \'OR\',
            array(
                \'taxonomy\' => \'event_cat\',
                \'field\'    => \'slug\',
                \'terms\'    => \'events\',
            ),
            array(
                \'taxonomy\' => \'category\',
                \'field\'    => \'term_id\',
                \'terms\'    => \'7\',
            ),
        );
         $query->set( \'tax_query\', $tax_query );

    }
}
add_action( \'pre_get_posts\', \'custom_archive_query\' );
至于样式问题,在循环内的存档页上,使用两个条件,has_category()has_term 检查一篇文章属于哪个术语,并根据该术语设置样式

if( has_category( 7 ) ) {
    // DO SOMETHING FOR CATEGORY
}elseif( has_term( \'events\', \'event_cat\' ) ) {
    // DO SOMETHING FOR TERM event_cat
}
请注意:这些都未经测试

EDIT

您可以使用WP_Query

相关推荐

Display an archives name

我想显示当前存档文件的名称,因此对于下面的url,我可以这样做<h1><?php echo \"answer\" ?></h1> 输出如下内容<h1>News</h1> 或者更好<h1>News: supplierName</h1> http://www.site.com/suppliers/news/?supplierstax=supplierName