如何强制Wordpress搜索栏搜索页面而不是产品?

时间:2017-06-15 17:25:59

标签: wordpress woocommerce searchbar

首先让我说我几乎没有发布过stackoverflow,所以我希望我能在正确的部分发布。

我为我的客户提供了一个带有Woocommerce的Wordpress网站。我希望搜索栏不搜索产品,而是搜索页面。忽略所有产品非常重要,因为我们不会从产品页面订购产品,而是在多个页面上订购了带有产品名称的订单。我们可以更改搜索栏,以便只选择页面而不是产品吗?

我很熟悉在我的孩子主题中使用functions.php或复制Woocommerce文件。非常感谢任何帮助!

[**已编辑/更新**] 我现在有这个:

function filter_search($query) {
    if ($query->is_search) {
        $query->set('post_type', array('post', 'page'));
    }
    return $query;
}
add_filter('pre_get_posts', 'filter_search');

function __search_by_title_only( $search, &$wp_query ){
    global $wpdb;
    if ( empty( $search ) )
        return $search; // skip processing - no search term in query
    $q = $wp_query->query_vars;
    $n = ! empty( $q['exact'] ) ? '' : '%';
    $search =
    $searchand = '';

    foreach ( (array) $q['search_terms'] as $term ) {
        $term = esc_sql( like_escape( $term ) );
        $search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term{{$n}')";
        $searchand = ' AND ';
    }

    if ( ! empty( $search ) ) {
        $search = " AND ({$search}) ";
        if ( ! is_user_logged_in() )
            $search .= " AND ($wpdb->posts.post_password = '')  ";
    }

    $search .= " AND ($wpdb->posts.post_type = 'page') ";

    return $search;
}
add_filter( 'posts_search', '__search_by_title_only', 500, 2 );

哪种方法完美无缺。它搜索页面而不是产品,并搜索标题中的搜索词而不是内容。现在我唯一的请求和问题是我需要输出页面LINK而不是页面CONTENT。 (它一个接一个地输出页面的纯内容)

[**已编辑/更新#2 **]

通过删除所有代码并将product-searchform.php(来自woocommerce)复制到我的子主题(在名为woocommerce的文件夹中)并更改:

,我获得了与上述相同的结果
<input type="hidden" name="post_type" value="product" />

<input type="hidden" name="post_type" value="page" />

这实现了仅查询页面而不是产品的相同效果,以及在页面标题中搜索关键字而不是在页面内容中搜索。现在我仍然得到显示页面内容的相同输出,我只希望它显示页面的链接,而不是内容。有什么想法吗?

[**已编辑/更新3 **] 好的,我解决了这个问题。

下一步是将search.php复制到您的子主题中并添加一些代码。 添加:

$s=get_search_query();
$args = array('s' =>$s);
// The Query
$the_query = new WP_Query( $args );

之前

if ( have_posts() ) : ?>

然后添加:

while ( $the_query->have_posts() ) {
    $the_query->the_post();?>
    <li>
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    </li><?php
}

之前:

get_template_part( 'loop' );

并评论get_template_part(&#39; loop&#39;);分开。

1 个答案:

答案 0 :(得分:0)

尝试在functions.php中添加此代码

mtd1Helper
相关问题