posts_search中的自定义查询

Pet*_*ter 8 php mysql wordpress

如何将此查询用作自定义搜索查询?

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
  "; 
}
Run Code Online (Sandbox Code Playgroud)

查询是正确的(我在phpMyAdmin中检查过)但在WordPress中我得到了消息,没有结果.

Dr.*_*ker 6

在function.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;
}
Run Code Online (Sandbox Code Playgroud)


Jua*_*one 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;
}
Run Code Online (Sandbox Code Playgroud)

您可以在https://codex.wordpress.org/Class_Reference/wpdb中找到更多信息