Mit der Standard-WordPress-Suchfunktion nach Autorennamen suchen?

7

Mir ist klar, dass die Verbesserung der Suchfunktion von WordPress eine riesige Dose Würmer ist, aber das Einzige, was ich tun muss, ist, Ergebnisse anzuzeigen, wenn ich nach dem Namen eines Autors suche.

Wenn wir beispielsweise eine Autorin namens Katie Johnson haben und ich nach Katie suche, erhalte ich Ergebnisse, bei denen ihr Name im INHALT aufgeführt ist, aber keine Ergebnisse, die sie VERÖFFENTLICHT hat.

Dies scheint ein einfaches Problem zu sein, und dennoch habe ich noch keine Lösung dafür gefunden.

Vielen Dank.

Zack
quelle

Antworten:

6

Vielleicht können Sie versuchen, Ihre Bedingung direkt in die Abfragezeichenfolge einzufügen

function wpse_29570_where_filter($where){
        global $wpdb;
        if( is_search() ) {
            $search= get_query_var('s');
            $query=$wpdb->prepare("SELECT user_id  FROM $wpdb->usermeta WHERE ( meta_key='first_name' AND meta_value LIKE '%%%s%%' ) or ( meta_key='last_name' AND meta_value LIKE '%%%s%%' )", $search ,$search);
            $authorID= $wpdb->get_var( $query );

            if($authorID){
                $where = "  AND  ( wp_posts.post_author = {$authorID} ) ";
            }

         }
         return $where;
    }

    add_filter('posts_where','wpse_29570_where_filter');
hacksy
quelle
Ich verstehe, was Sie hier versuchen, aber es funktioniert leider nicht für mich. Dadurch wird die Abfragezeichenfolge tatsächlich deaktiviert und der Autorenname auf nichts gesetzt. Ich glaube, die Ergebnisse sind ALLES, was veröffentlicht wurde.
Zack
Aktualisierte meine Antwort auf etwas, das besser
funktionieren
1
Ich habe auf diesen Code aktualisiert und er scheint nicht alle Ergebnisse des Benutzers zurückzugeben. Obwohl es EINIGE Ergebnisse zurückgibt, bin ich mir nicht sicher, welche ausgewählt werden und welche weggelassen werden oder WARUM. Grundsätzlich unterscheiden sich die Ergebnisse für die Suche nach dem Namen eines Benutzers und das Archiv für diesen Benutzer drastisch.
Zack
1
@ Jake, du hast recht :), ich glaube, ich habe damals vergessen, diese Zeile beim Testen zu entfernen. Die Antwort wurde aktualisiert
hacksy
1
Das $where =sollte wohl sein$where .=
Jason