2015-08-16 18 views
7

Bu sorguyu özel arama sorgum olarak nasıl kullanabilirim?Özel sorgularda ara sorgu

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 
    "; 
} 

sorgu (ı phpMyAdmin'de bu işaretli) doğrudur ama WordPress mesajı aldım, sonuç yok. @Gustavo STRAUBE önerdiği gibi

+0

Aslında ne yapmaya çalışıyorsunuz? – rnevius

+0

Filtre yayınları, yalnızca filtre kullanımı için WHERE Clausel'i temel dosyaları kontrol eder: https://github.com/WordPress/WordPress/blob/master/wp-includes/query.php#L2701 –

+0

Ham sorguyu yürütmek için, muhtemelen doğrudan "$ wpdb" globalini kullanmak daha iyidir. WP belgelerinde tam bir referans var: https://codex.wordpress.org/Class_Reference/wpdb –

cevap

5

daha bilgi bulabilirsiniz

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; } 

.php dosyası: wordpress içinde

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

Özel sorguları $ wpdb aracılığıyla gerçekleştirilir. Wordpress'te mysql sorgu filtrelerini kullanırsanız, SQL enjeksiyonlarından kaçınmak için sorguları çalıştırmayabilir. Özel sorguları oluşturmak için $ wpdb'yi kullanın.