WordPress更改搜索结果

时间:2018-10-05 17:01:00

标签: php wordpress search woocommerce

我遇到了我的WordPress主题(“悉尼”)显示搜索结果错误的问题。我只想显示WooCommerce产品,而不仅仅是列出帖子。

这些应该按如下图所示的漂亮网格排列:

this picture

目前,结果列出如下

like this

如何更改搜索结果的显示方式?

此刻我的search.php看起来像这样:

<?php get_header(); ?>

<div id="primary" class="content-area col-md-9">
    <main id="main" class="post-wrap" role="main">

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

        <header class="page-header">
            <h3><?php printf( __( 'Search Results for: %s', 'sydney' ), '<span>' . get_search_query() . '</span>' ); ?></h31>
        </h3>
        </header><!-- .page-header -->

        <?php /* Start the Loop */ ?>
        <?php while ( have_posts() ) : the_post(); ?>

            <?php
            /**
             * Run the loop for the search to output the results.
             * If you want to overload this in a child theme then include a file
             * called content-search.php and that will be used instead.
             */
            get_template_part( 'content', 'search' );
            ?>

        <?php endwhile; ?>

        <?php the_posts_navigation(); ?>

    <?php else : ?>

        <?php get_template_part( 'content', 'none' ); ?>

    <?php endif; ?>

    </main><!-- #main -->
</div><!-- #primary -->

非常感谢你们!

** 更新 kashalo提供的解决方案部分起作用,但是搜索结果看起来与产品页面略有不同,并且仅在一列而不是网格中列出。 improvements by kashalo

** 更新 Alexander Wigmore建议的解决方案看起来几乎就像我想要的那样。在page.php中复制search.php的唯一问题是产品仍在显示,而不是在它们所适合的类别中显示时才显示。例如:搜索 saat 结果首先显示的是商品,但通常在 Saatgut 类别下显示。

Alexander Wigmore's solution

2 个答案:

答案 0 :(得分:0)

我的建议是不要直接修改wp或主题模板的搜索文件,而是使用子主题的一种好习惯。对于结果的设计显示,您可以花一点时间用css对其进行自定义,而不是仅显示产品,您可以使用基于所使用主题(如果有)构建的任何过滤器,也可以自己创建一个用于过滤结果的函数(也称为挂钩)。

用于过滤结果的示例类似于上面的代码:

add_action( 'pre_get_posts', 'filter_woocommerce_products' ); // the hook

function filter_woocommerce_products( $query ) { // the function
    if( ! is_admin() && is_search() && $query->is_main_query() ) {
        // verify if can use the search function and the search string is from the search call
        $query->set( 'post_type', 'product' ); // filter the posts with type products that corrispond to woocommerce products.
    }
}

,并且此功能必须保存在您的主题或子主题的function.php文件中。

有关更多信息,建议您在wp页面上阅读有关子主题和pre_get_posts文档的更多信息。

希望它会有所帮助,随时问。

答案 1 :(得分:0)

您将要修改Wordpress处理搜索的方式。 添加“操作”即可轻松完成此操作,将以下代码添加到您的functions.php文件中。

function searchfilter($query) {

    if ($query->is_search && !is_admin() ) {
        $query->set('post_type',array('product'));
    }

return $query;
}

add_filter('pre_get_posts','searchfilter');

这将使搜索页面仅显示产品。值得注意的是,您可以通过以下行中的array重新添加其他帖子类型:$query->set('post_type',array('product'));