web-dev-qa-db-fra.com

Comment faire une recherche personnalisée sur le backend dans Wordpress sans plugin?

J'ai un type de message appelé usr_jardin avec un champ personnalisé appelé sim_nuip. J'aimerais que la recherche fonctionne pour le titre de l'article et aussi par champ personnalisé. J'essaye ça mais ça ne me fonctionne pas.

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 est une action, pas un filtre. Change ça:

add_filter('pre_get_posts','searchfilter');

pour ça:

add_action('pre_get_posts','searchfilter');

Vous n'avez pas non plus besoin de renvoyer $query.

Voir la documentation de pre_get_posts: http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

1
danielck