常规帖子首先(降序),然后在WP搜索中自定义帖子类型(按字母顺序排列)

时间:2017-08-16 03:18:35

标签: wordpress search grouping custom-post-type alphabetical-sort

我一直在拼凑各种各样的例子,但似乎无法解决这个问题。

我有定期的博客帖子(新闻),我希望显示最新的帖子,然后是我希望在新闻下方分组的自定义帖子类型(商家)。我正在使用Sage,这是我的第一个主题。

到目前为止,这是我的初学者代码:

<?php get_template_part('templates/page', 'header'); ?>

    <?php if (!have_posts()) : ?>
        <div class="alert alert-warning">
            <?php _e('Sorry, no results were found.', 'sage'); ?>
        </div>
        <?php get_search_form(); ?>
            <?php endif; ?>

                <?php if ( have_posts() ) : ?>
                    <?php while ( have_posts() ) : the_post(); ?>
                        <?php $post_type = get_post_type_object( get_post_type() ); ?>
                            <?php $type = get_post_type(); ?>

                                <?php if ($type == 'post') { ?>
                                    <h2>News Results</h2>
                                    <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                                        <div>
                                            <a href="<?php the_permalink(); ?>">
                                                <?php $cats=get_the_category(); ?>
                                                    <?php echo $cats[0]->cat_name; ?>

                                            </a>
                                        </div>
                                        <div>
                                            <h3><?php the_title(); ?></h3>

                                            <div class="result-excerpt">
                                                <?php if ( has_excerpt( $post->ID ) ) {
              echo the_excerpt(); 
            } else {
              echo get_excerpt(); 
            } ?>
                                            </div>

                                        </div>
                                    </article>

                                    <?php } elseif ($type == 'business') { ?>

                                        <h2>Business Results</h2>
                                        <article <?php post_class(); ?>>
                                            <header>
                                                <h2 class="entry-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
                                                <?php if (get_post_type() === 'post') { get_template_part('templates/entry-meta'); } ?>
                                            </header>
                                            <div class="entry-summary">
                                                <?php the_excerpt(); ?>
                                            </div>
                                            <a href="<?php the_permalink(); ?>">
                                                <?php $cats=get_the_category(); ?>
                                                    <?php echo $cats[0]->cat_name; ?> -
                                                        <?php the_title(); ?>
                                            </a>
                                            <h3><?php echo the_sub_field('title'); ?></h3>
                                            <?php if( get_sub_field('content') ): ?>
                                                <div class="result-excerpt">
                                                    <?php echo custom_field_excerpt(); ?>
                                                </div>
                                                <?php endif; ?>
                                        </article>

                                        <?php } ?>

                                            <?php endwhile; ?>
                                                <?php endif; ?>

1 个答案:

答案 0 :(得分:0)

我认为问题在于你按顺序循环每个帖子,并决定如何处理它。这将导致输出,无论它是什么,输出顺序与输入相同。

我不会说非常流利的PHP,但我认为发生的事情是算法的内容如下:

-for each post:
  - if it's a 'post', display it like «this»
  - otherwise, if it's a 'business', display it instead like «this»

我想你想要两个循环,比如:

-for each post:
  - if it's a 'post', display it like «this»
-for each post:
  - if it's a 'business', display it like «this»

不幸的是,我没有看到存储在数组中的明显引用并循环。我真的不知道圣人是如何工作的,所以我必须把实施留给你。我最好的猜测 - 我真诚地怀疑这会起作用 - 如下:

<?php get_template_part('templates/page', 'header'); ?>

<?php if (!have_posts()) : ?>
    <div class="alert alert-warning">
        <?php _e('Sorry, no results were found.', 'sage'); ?>
    </div>
    <?php get_search_form(); ?>
        <?php endif; ?>

            <?php if ( have_posts() ) : ?>
                <?php while ( have_posts() ) : the_post(); ?>
                    <?php $post_type = get_post_type_object( get_post_type() ); ?>
                        <?php $type = get_post_type(); ?>

                            <?php if ($type == 'post') { ?>
                                <h2>News Results</h2>
                                <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                                    <div>
                                        <a href="<?php the_permalink(); ?>">
                                            <?php $cats=get_the_category(); ?>
                                                <?php echo $cats[0]->cat_name; ?>

                                        </a>
                                    </div>
                                    <div>
                                        <h3><?php the_title(); ?></h3>

                                        <div class="result-excerpt">
                                            <?php if ( has_excerpt( $post->ID ) ) {
          echo the_excerpt(); 
        } else {
          echo get_excerpt(); 
        } ?>
                                        </div>

                                    </div>
                                </article>

                                        <?php endwhile; ?>
                                            <?php endif; ?>







        <?php if (!have_posts()) : ?>
            <div class="alert alert-warning">
                <?php _e('Sorry, no results were found.', 'sage'); ?>
            </div>
            <?php get_search_form(); ?>
                <?php endif; ?>

                    <?php if ( have_posts() ) : ?>
                        <?php while ( have_posts() ) : the_post(); ?>
                            <?php $post_type = get_post_type_object( get_post_type() ); ?>
                                <?php $type = get_post_type(); ?>

                                    <?php if ($type == 'business') { ?>

                                            <h2>Business Results</h2>
                                            <article <?php post_class(); ?>>
                                                <header>
                                                    <h2 class="entry-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
                                                    <?php if (get_post_type() === 'post') { get_template_part('templates/entry-meta'); } ?>
                                                </header>
                                                <div class="entry-summary">
                                                    <?php the_excerpt(); ?>
                                                </div>
                                                <a href="<?php the_permalink(); ?>">
                                                    <?php $cats=get_the_category(); ?>
                                                        <?php echo $cats[0]->cat_name; ?> -
                                                            <?php the_title(); ?>
                                                </a>
                                                <h3><?php echo the_sub_field('title'); ?></h3>
                                                <?php if( get_sub_field('content') ): ?>
                                                    <div class="result-excerpt">
                                                        <?php echo custom_field_excerpt(); ?>
                                                    </div>
                                                    <?php endif; ?>
                                            </article>

                                            <?php } ?>

                                                <?php endwhile; ?>
                                                    <?php endif; ?>
祝你好运!