2012-02-10 13 views
1

WordPressブログでこのカスタム機能を発見しました。唯一の問題は、私は第2のパラメータとして何を渡すべきかを知らないということです。それはクエリを要求していますが、クエリはこの関数の内部では起こりませんか?どのようなクエリを私はそれを渡すだろうか?Wordpressでカスタム検索機能を使う方法

私は1時間以上を検索しましたが、私は同様の機能を見つけ出しています。だから、私のワードプレス初心者がここに来ています。

BTWこの関数は、検索ターム(最初のパラメータ)を受け入れ、タイトルがLIKEのすべての投稿を検索パラメータとみなします。

function custom_search($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 = '') "; 
    } 

    return $search; 
} 
add_filter('c_search', 'custom_search', 500, 2); 
+0

私はなぜあなたのフィルターに 'c_search'を持っているのか分かりませんが、' posts_search' – nbsp

答えて

1

基本的に、関数の第2引数は参照になります。あなたはおよそ関数の第二引数を削除し、

global $wp_query; inside the function the code should still work, you will also have to change the `add_filter('c_search', 'custom_search', 500, 1);` 

を定義したり、あなたがあるとしての機能を維持し、global $wp_query;を定義することができればあなたのケースでは http://www.php.net/manual/en/functions.arguments.php

:あなたは、次のリンクでそれについて読むことができますどこでもあなたのfunctions.phpで、その場合は、すでに定義され、パラメータとして

0

あなたはまた、次のコードでの検索を行うことができることを渡さないで:

function __search_custom($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}') OR ($wpdb->posts.post_content LIKE '{$n}{$term}{$n}'))"; 
     $searchand = ' AND '; 
    } 

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

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

あなたが唯一のタイトルで検索したい場合は、次のコードで$検索を置き換える:実際には、あなたが任意のパラメータを渡す必要はありません...そのコードへの鍵は、それが上だ

$search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";

0

最後の行。それは、それが受け取ることをデータを変更する関数への呼び出しを追加することだん何... add_filterの引数は次のとおりです。

  1. データはその
  2. 機能をフィルタリングされますポイントで定義された関数は、(2)ので、これらの引数がALWある

を受け取ること

  • 実行の優先度(低いが最初である)
  • 引数の数を、データを受信し、フィルタリングされます機能

    フィルタ、それを参照していますそのコードに渡さAYSはおそらくwordpressのコアの一部ではないのですが、いくつかのカスタムプラグイン、フレームワークやテーマの

    あなたがあなた自身のテーマのカスタムクエリを作成したい場合は/プラグイン/何でも見てくださいhttp://codex.wordpress.org/Plugin_API/Filter_Reference/request

    関連する問題