2015-08-16 13 views
7

Come posso utilizzare questa query come query di ricerca personalizzata?Query personalizzata in 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 
    "; 
} 

La query è corretta (ho controllato questo in phpMyAdmin), ma in WordPress ottengo il messaggio, non ha prodotto risultati.

+0

Cosa stai cercando di fare? – rnevius

+0

Il filtro posts_search accetterà solo DOVE Clausole per l'utilizzo del filtro controlla sempre i file principali: https://github.com/WordPress/WordPress/blob/master/wp-includes/query.php#L2701 –

+0

Per eseguire una query non elaborata, probabilmente è meglio usare '$ wpdb' globale direttamente. C'è un riferimento completo su di esso nella documentazione di WP: https://codex.wordpress.org/Class_Reference/wpdb –

risposta

0

Come suggerito da @Gustavo Straube, sarebbe meglio usare $ wpdb nel qual caso è necessario implementare in questo modo:

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

È possibile trovare maggiori informazioni in https://codex.wordpress.org/Class_Reference/wpdb

5

In funzione il file .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

query personalizzate in WordPress vengono eseguite attraverso $ wpdb. Se si utilizzano semplicemente filtri di query mysql in wordpress, non è possibile eseguire le query per evitare iniezioni SQL. Quindi usa $ wpdb per creare query personalizzate.

Problemi correlati