从头开始构建woocommerce搜索结果页面 - 忽略搜索词

时间:2018-04-30 13:57:56

标签: php wordpress loops search woocommerce

我正在使用自定义构建的主题,并且在构建搜索页面时遇到了问题。

主题基于HTML Bones项目 - https://github.com/eddiemachado-zz/bones

我设法让搜索页面显示循环,但它没有使用提供的搜索字词,而是显示所有产品。

我希望有更多经验的人能够指出为什么在此设置中忽略搜索字词?

搜索表单的代码是:

<form role="search" method="get" id="searchform" class="searchform" action="<?php echo site_url( '/' ); ?>">
    <div>
        <label for="s" class="screen-reader-text"><?php _e('Search for:','bonestheme'); ?></label>
        <input type="search" id="s" name="s" value="" />

        <button type="submit" id="searchsubmit" ><?php _e('Search','bonestheme'); ?></button>
    </div>
</form>

,结果页面代码为:

<?php
/**
 * The template for displaying search results pages.
 *
 */

if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly


get_header(); ?>

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

        <ul id="product-list-global" class="products product-list-global col-sm-9">
    <?php

        $args = array(
            'post_type' => 'product',
            'posts_per_page' => 12
            );
        $loop = new WP_Query( $args );
        if ( $loop->have_posts() ) {
            while ( $loop->have_posts() ) : $loop->the_post();

                wc_get_template_part( 'content', 'product' );

            endwhile;
        } else {
            echo __( 'No products found' );
        }
        wp_reset_postdata();
    ?>
</ul><!--/.products-->
            <?php
 get_template_part( 'sidebar-shop-default' ); ?>

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

<?php

get_footer();

感谢阅读!

1 个答案:

答案 0 :(得分:0)

在function.php中添加以下代码

add_filter( 'get_product_search_form' , 'woo_custom_product_searchform' );

/**
 * woo_custom_product_searchform
 *
 * @access      public
 * @since       1.0 
 * @return      void
*/
function woo_custom_product_searchform( $form ) {

    $form = '<form role="search" method="get" id="searchform" action="' . esc_url( home_url( '/'  ) ) . '">
        <div>
            <label class="screen-reader-text" for="s">' . __( 'Search for:', 'woocommerce' ) . '</label>
            <input type="text" value="' . get_search_query() . '" name="s" id="s" placeholder="' . __( 'My Search form', 'woocommerce' ) . '" />
            <input type="submit" id="searchsubmit" value="'. esc_attr__( 'Search', 'woocommerce' ) .'" />
            <input type="hidden" name="post_type" value="product" />
        </div>
    </form>';

    return $form;

}

实际上你可以使用archive-product.php中的条件is_search(),search.php文件仅用于全局搜索,也可以从结果代码中删除$ args和loop,因为默认情况下提供woocommerce搜索模板。