首先让我说我几乎没有发布过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;);分开。
答案 0 :(得分:0)
尝试在functions.php中添加此代码
mtd1Helper