2015-08-16 70 views
7

如何將此查詢用作我的自定義搜索查詢?posts_search中的自定義查詢

add_filter('posts_search', 'my_search_is_perfect', 20, 2); 
function my_search_is_perfect($search, $wp_query) 
{ 
    $sWord = 'Zukunft haus'; 

    return " 
     SELECT *, 
       MATCH(post_title) AGAINST('$sWord' IN BOOLEAN MODE) AS Score 
     FROM `wp_posts` 
     INNER JOIN wp_term_relationships ON wp_term_relationships.object_id = ID 
      AND wp_term_relationships.term_taxonomy_id = 1 
     WHERE MATCH(post_title) AGAINST ('$sWord' IN BOOLEAN MODE) 
     AND `post_status` = 'publish' 
     AND `post_type` = 'post' 
     ORDER BY score DESC 
    "; 
} 

查詢是正確的(我在phpMyAdmin檢查這一點),但在WordPress我得到的消息,沒有結果。

+0

你究竟在做什麼? – rnevius

+0

過濾器posts_search將只接受WHERE Clausels的過濾器使用情況始終檢查覈心文件:https://github.com/WordPress/WordPress/blob/master/wp-includes/query.php#L2701 –

+0

要執行原始查詢,可能最好直接使用'$ wpdb' global。在WP文檔中有關於它的完整參考:https://codex.wordpress.org/Class_Reference/wpdb –

回答

0

正如@Gustavo Straube建議,這將是更好地使用WPDB $在這種情況下,你應該實現這樣的:

add_filter('posts_search', 'my_search_is_perfect', 20, 2); 

function my_search_is_perfect() 
{ 
    global $wpdb; 

    $sWord = 'Zukunft haus'; 

    $query = "SELECT *, 
        MATCH(post_title) AGAINST('$sWord' IN BOOLEAN MODE) AS Score 
      FROM `".$wpdb->prefix."_posts` 
      INNER JOIN ".$wpdb->prefix."_term_relationships ON ".$wpdb->prefix."_term_relationships.object_id = ID 
       AND ".$wpdb->prefix."_term_relationships.term_taxonomy_id = 1 
      WHERE MATCH(post_title) AGAINST ('$sWord' IN BOOLEAN MODE) 
      AND `post_status` = 'publish' 
      AND `post_type` = 'post' 
      ORDER BY score DESC"; 

    $myrows = $wpdb->get_results($query); 

    return $myrows; 
} 

你可以找到https://codex.wordpress.org/Class_Reference/wpdb

5

在功能上的更多信息.php文件:

add_filter('posts_search', 'my_search_is_perfect', 20, 2); 
function my_search_is_perfect() 
{ 
    global $post; 
    global $wpdb; 
    $sWord = 'Zukunft haus'; 

    $sel_query = "SELECT *, 
          MATCH(post_title) AGAINST('$sWord' IN BOOLEAN MODE) AS Score 
        FROM ".$wpdb->prefix."posts 
        INNER JOIN ".$wpdb->prefix."term_relationships ON ".$wpdb->prefix."term_relationships.object_id = ID 
         AND ".$wpdb->prefix."term_relationships.term_taxonomy_id = 1 
        WHERE MATCH(post_title) AGAINST ('$sWord' IN BOOLEAN MODE) 
        AND post_status = 'publish' 
        AND post_type = 'post' 
        ORDER BY score DESC"; 
    $totaldata = $wpdb->get_results($sel_query); 

    return $totaldata; 
} 
0

wordpress中的自定義查詢通過$ wpdb執行。如果您在wordpress中只使用mysql查詢過濾器,則可能無法執行查詢以避免SQL注入。所以使用$ wpdb來創建自定義查詢。