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

How to force Wordpress search bar to search pages not products?

首先让我说我几乎没有在 Whosebug 上发帖所以我希望我在正确的部分。

我有一个带有 Woocommerce 的 Wordpress 网站供我的客户使用。我希望搜索栏不搜索产品而是搜索页面。忽略所有产品很重要,因为我们不从产品页面订购产品,而是我在多个页面上有 collections 的订单表格,标题为产品名称。我们能否更改搜索栏,使其只搜索页面而不搜索产品?

我很乐意在 functions.php 中工作或在我的 child 主题中复制 Woocommerce 文件。非常感谢任何帮助!

[** EDITED/UPDATE **] 我现在有这个:

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 而不是页面内容。 (输出页面纯内容,一个接一个)

[** EDITED/UPDATE #2 **]

我通过删除所有代码并将 product-searchform.php(来自 woocommerce)复制到我的 child 主题中(在名为 woocommerce 的文件夹中),实现了与上述相同的结果并更改:

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

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

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

[** EDITED/UPDATE 3 **] 好的,我解决了这个问题。

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

$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('loop');分手了。

尝试在functions.php

中添加这段代码
function filter_search($query) {
    if ($query->is_search) {
    $query->set('post_type', array('post', 'page'));
    };
    return $query;
};
add_filter('pre_get_posts', 'filter_search');