排序自定义 post 类型取决于 ACF 日期字段

Sorting custom post types depends on ACF Date Field

我的任务是对所有自定义 post 类型('audio'、'video'、'webdev' 等)按分类 'portfolio' 或任何标签。我用下面的代码来做。


    add_filter( 'pre_get_posts', 'custom_post_types_sort' );

    function custom_post_types_sort( $query ) {

        if ( is_tax('portfolio') || is_tag() ) {

            $cptui_post_types = cptui_get_post_type_slugs();

            // Sort portfolio taxonomy posts by project start date.
            $query->set( 'post_type', $cptui_post_types );
            $query->set( 'order', 'DESC' );
            $query->set( 'orderby', 'meta_value_num' );
            $query->set( 'meta_key', 'date' );
        }
    }

?>

除一件事外,一切正常。我的菜单未显示在分类模板上。我正在使用分类法-portfolio.php 模板来显示页面。

我假设这是由于查询修改而发生的。

<?php 
    /**
    *    Portfolio Taxonomy Template
    */
    get_header();
?>

<section class="portfolio-template swiper">
    <div class="swiper-wrapper postfolio-list">
        <div class="swiper-slide">
            <?php get_template_part( 'template-parts/breadcrumbs' ); ?>
            <div class="portfolio-project-items">
                <?php if ( have_posts() ) : ?>
                    <?php while ( have_posts() ) : the_post(); ?>
                        <?php get_template_part( 'template-parts/content', 'portfolio-item' ); ?>
                    <?php endwhile; ?>
                <?php endif; ?>
            </div>
        </div>
    </div>
</section>

<?php get_footer(); ?>

替换这个

if ( is_tax('portfolio') || is_tag() ) {

由此

if ( ( is_tax('portfolio') || is_tag() ) && $query->is_main_query() ) {

查看文档:https://developer.wordpress.org/reference/functions/is_main_query/

This function is most commonly used within hooks to distinguish WordPress’ main query (for a page, post, or archive) from a custom/secondary query.

这能解决您的问题吗?