web-dev-qa-db-de.com

Backend-Suche; CPT-Meta einbeziehen?

Ich habe derzeit einen benutzerdefinierten Beitragstyp mit 2 Teiltiteln. Ich habe alles perfekt am Frontend. Wenn Sie jedoch nach einem Beitrag suchen, wird der von Ihnen gesuchte Beitrag nicht immer angezeigt, da ein Teil des Titels im Meta für diesen Beitrag enthalten ist.

Kann ich das Meta in die Back-End-Suche für den benutzerdefinierten Beitragstyp einbeziehen?

1
Austin Biggs

Ungetestet, aber Folgendes sollte funktionieren:

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;
}

Bitte beachten Sie, dass dies vollständig ungetestet ist, aber im Prinzip funktionieren sollte und Sie zumindest zum Einstieg bringen wird .

1
Stephen Harris