Wordpress:显示搜索到的帖子所在的类别

时间:2014-12-24 18:12:42

标签: wordpress search categories

在查看我发现的有关此事的每个网站后,我发布了这个问题。没有一个答案给了我解决这个问题的线索,谷歌的结果被完全不同的主题所污染。

我想要实现的是显示搜索查询返回的帖子的类别列表。 最终的想法是实现这样的目标。 (请记住,这些城市中的每一个都是一个类别)

Each one of the items is a category

用户将搜索帖子,然后转到显示结果的结果。我需要做的是找到返回的所有帖子的类别,并尝试在每个帖子上执行post_count,以显示在该特定类别中有多少帖子(所有返回的帖子)。

提前致谢。

1 个答案:

答案 0 :(得分:2)

由于您没有提供任何代码,我尝试了我的方式。我猜,实现它的不是最佳方式 但截至目前,您可以这样做。

在这里,我使用PHP来实现期望的结果

我使用了二十四个主题search.php

这是Twenty Fourteen主题search.php我的代码,您可以在search file中实施:

    <?php
    /**
     * The template for displaying Search Results pages
     *
     * @package WordPress
     * @subpackage Twenty_Fourteen
     * @since Twenty Fourteen 1.0
     */

    get_header(); ?>

        <section id="primary" class="content-area">
            <div id="content" class="site-content" role="main">

                <?php if ( have_posts() ) : ?>

                <header class="page-header">
                    <h1 class="page-title"><?php printf( __( 'Search Results for: %s', 'twentyfourteen' ), get_search_query() ); ?></h1>
                </header><!-- .page-header -->

                    <?php 

                        // Start the Loop.
                        $post_id_array = array(); //Blank array to store all Post IDs

                        while ( have_posts() ) : the_post(); 

                            array_push($post_id_array, $post->ID); //store ID to array

                            /*
                             * Include the post format-specific template for the content. If you want to
                             * use this in a child theme, then include a file called called content-___.php
                             * (where ___ is the post format) and that will be used instead.
                             */
                            get_template_part( 'content', get_post_format() );

                        endwhile;
                        // Previous/next post navigation.
                        twentyfourteen_paging_nav();

                        $catarray = array(); //Blank array to store all categories
                        $k=1;
                        foreach($post_id_array as $my_post){
                            $my_category = get_the_category( $my_post );

                            foreach($my_category as $my_cat){
                                array_push($catarray, $my_cat->cat_name); //Store category in array
                            }

                            $something = array_count_values($catarray); //Count total number of element in category array

                            foreach(array_unique($catarray) as $some){
                                if($k == sizeof($my_category) ): //Condition to print all thing if only it is last element of an array.
                                    echo $some."(". $something[$some].")<br>";
                                endif;
                            }
                            $k++;
                        }
                    else :
                        // If no content, include the "No posts found" template.
                        get_template_part( 'content', 'none' );

                    endif;
                ?>

            </div><!-- #content -->
        </section><!-- #primary -->

    <?php
    get_sidebar( 'content' );
    get_sidebar();
    get_footer();

在上面的代码中,我已经完成了:

步骤1 :使用一个空白数组来存储搜索查询提供的帖子ID

步骤2 :使用PHP的array_push功能推送所有 ID 以创建空白数组注意:请确保您已将其放入while loop以获取所有ID

两个步骤之后,现在您有一个所有帖子ID数组

第3步:使用另一个空白数组来存储帖子的相关类别名称

步骤4 :取一个变量并将其值提供给1,这在最后很有用。(I采取了$k = 1)。

步骤5 :制作一个帖子ID foreach循环。 获取带有wordpress函数get_the_category的帖子的类别名称。It will fetch category based on post ID

第6步:现在是时候使用我们为类别名称创建的空白数组了。仅{{1} }通过类别名称和商店类别的名称到数组

步骤7 使用PHP array_count_values函数计算类别数组中的总名称并为其分配变量。(我使用过) loop)。

第7步之后,我们有一个类别名称数组注意:此数组中可能有类别名称的重复。要删除重复,请按照下一步操作。

步骤8 :使用PHP的'array_unique'函数从数组中仅获取唯一值

第9步:设置类别名称的$something

如果您现在loopecho

现在是时候使用我们在帖子ID it will print categories to total number of post times循环foreach之前采取的变量了。

最后一步:现在让一个条件最后一个帖子上打印所有类别

因此,我使用了$k=1,这意味着,它只会在类别数组的长度等于变量if($k == sizeof($my_category) )时打印(简而言之,最后)。

增加 e K

的值

希望它对你有所帮助。问我如果你有任何疑问。