2017-06-15 81 views
1

首先让我说我几乎没有发布在stackoverflow上,所以我希望我在正确的部分。如何强制Wordpress搜索栏搜索页面不是产品?

我有一个WordPress客户端的Woocommerce网站。我希望搜索栏不搜索产品,而是搜索页面。忽略所有产品是很重要的,因为我们不从产品页面订购产品,而是在多个页面上收集标有产品名称的订单表格。我们可以更改搜索栏,以便只在页面上显示而不显示产品?

我很喜欢在functions.php中工作或在我的子主题中复制Woocommerce文件。任何帮助深表感谢!

[**编辑/ 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而不是页面CONTENT。 (它输出页面的纯含量,一个接一个)

[** EDITED/UPDATE#2 **]

我通过删除所有的代码和复制产品 - 来实现相同的结果如上searchform.php(从woocommerce)到我的子主题(在文件夹名为woocommerce)和改变:

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

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

这实现查询仅PA同样影响ges而不是产品,并且在页面标题中搜索关键字而不是在页面内容中搜索。现在我仍然得到相同的输出显示页面内容,我只希望它显示页面的链接,而不是内容。有任何想法吗?

[** EDITED/UPDATE 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( '回路');一部分。

+0

添加以下代码你尝试过这么远吗? – Dwhitz

+0

@Dwhitz我刚刚尝试了一些代码,在我原来的帖子中查看我的更新。现在我只需要输出页面链接而不是页面内容。例如,我可以有5个与此相匹配的页面,我不希望所有5个页面内容都被一个接一个地输出。相反,我需要的链接列表 –

回答

0

尝试在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'); 
+0

它肯定是搜索页面而不是产品,但输出是每个页面的内容粘贴一个接一个。这很容易改变,所以我可以输出一个链接列表,而不是输出每个页面的内容?我宁愿如果有一种方法只搜索页面标题,而不是页面内容。例如,某些词出现在页面中,例如关于我们 –

+0

查看我的更新,查看我在哪里 –