web-dev-qa-db-fra.com

Recherche en arrière-plan; inclure méta CPT?

J'ai actuellement un type de message personnalisé avec 2 titres de partie; J'ai tout fonctionne parfaitement sur le front-end. Mais lorsqu'il s'agit de rechercher un article, celui que vous recherchez n'apparaît pas toujours, car une partie du titre est dans la méta de cet article.

Puis-je inclure la méta dans la recherche finale du type de message personnalisé?

1
Austin Biggs

Non testé, mais ce qui suit devrait fonctionner:

add_action( 'posts_clauses', 'wpse110779_filter_admin_search', 10, 2 );
function wpse110779_filter_admin_search( $pieces, $query ){
      global $wpdb;

     //Check if this is the main query,and is a search on the admin screen
     if( $query->is_search() & $query->is_admin() && $query->is_main_query() ){

          //Collect post types & search term
          $post_types = $query->get('post_type');
          $search = $query->get('s');

          //Check if query is for 'my-cpt' post type
          if( 'my-cpt' == $post_types 
               || ( is_array(  $post_types ) && in_array( 'my-cpt',  $post_types ) )
          ){

             //Set up meta query
             $meta_query = array( array(
                'key' => 'my_key',
                'value' => $search,
                'compare' => 'LIKE'
            ));

             //Generate sql
             $meta_sql = get_meta_sql( $meta_query, 'post', $wpdb->posts, 'ID', $query );

             $pieces['join'] . = " ". $meta_sql['join'];
             $pieces['where'] . = " OR (" . $meta_sql['where'] .")";
          }
     }
     return $pieces;
}

Veuillez noter ceci complètement non testé, mais devrait fonctionner en principe et vous aidera au moins à démarrer .

1
Stephen Harris