webentwicklung-frage-antwort-db.com.de

Wie mache ich eine benutzerdefinierte Suche im Backend in Wordpress ohne Plugin?

Ich habe einen Beitragstyp namens usr_jardin mit einem benutzerdefinierten Feld namens sim_nuip. Ich möchte, dass die Suche nach dem Titel des Beitrags und auch nach benutzerdefiniertem Feld funktioniert. Ich versuche das aber funktioniert bei mir nicht.

function searchfilter($query)
{
    $custom_fields = array("_post_title", "nuip");
    $searchterm = $query->query_vars['s'];
    $query->query_vars['s']="";

    if($searchterm != "")
    {
        $meta_query = array('relation' => 'OR');

        foreach($custom_fields as $cf)
        {
            array_Push($meta_query, array('key'=> $cf,'value'=> $searchterm,'compare'=> 'LIKE'));
        }

        $query->set("meta_query", $meta_query);
    }

    if($query->is_search)
    {
        $query->set('post_type', array('post', 'usr_jardin'))
    }
    return $query;
}

add_filter('pre_get_posts','searchfilter');
add_action('save_post','add_title_custom_field');

function add_title_custom_field($postid){
    update_post_meta($postid, "_post_title", $_POST["post_title"]);
}
1
user3598584

pre_get_posts ist eine Aktion, kein Filter. Ändere das:

add_filter('pre_get_posts','searchfilter');

dazu:

add_action('pre_get_posts','searchfilter');

Sie müssen $query auch nicht zurückgeben.

Siehe Dokumentation für pre_get_posts: http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

1
danielck