2017-06-15 82 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

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