Dashboard-Suchfunktion funktioniert nicht gut

Ich habe einen CPT namens “Teilnehmer”. Wenn ich es im Dashboard besuche und nach einem der Beiträge suche, die zu diesem CPT gehören (ich suche ein Werk, das Teil des Titels eines bestehenden Beitrags ist), findet WP nichts, obwohl der Beitrag in der Liste steht mit der Arbeit, die ich suche. Warum funktioniert die Suchfunktion in diesem Fall nicht?

So habe ich meinen CPT erstellt:

function my_custom_post_participant() { $labels = array( 'name' => _x( 'Participants', 'post type general name' ), 'singular_name' => _x( 'Participant', 'post type singular name' ), 'add_new' => _x( 'Add New', 'participant' ), 'add_new_item' => __( 'Add New Participant' ), 'edit_item' => __( 'Edit Participant' ), 'new_item' => __( 'New Participant' ), 'all_items' => __( 'All Participants' ), 'view_item' => __( 'View Participant' ), 'search_items' => __( 'Search Participants' ), 'not_found' => __( 'No participants found' ), 'not_found_in_trash' => __( 'No participants found in the Trash' ), 'parent_item_colon' => '', 'menu_name' => 'Participants' ); $args = array( 'labels' => $labels, 'description' => 'Holds our participants and participant specific data', 'public' => true, 'menu_position' => 4, 'supports' => array( 'title', 'custom-fields' ), 'has_archive' => true, ); register_post_type( 'participant', $args ); } add_action( 'init', 'my_custom_post_participant' ); function my_updated_messages_participant( $messages ) { global $post, $post_ID; $messages['participant'] = array( 0 => '', 1 => sprintf( __('Participant updated. View participant'), esc_url( get_permalink($post_ID) ) ), 2 => __('Custom field updated.'), 3 => __('Custom field deleted.'), 4 => __('Participant updated.'), 5 => isset($_GET['revision']) ? sprintf( __('Participant restored to revision from https://wordpress.stackexchange.com/questions/99684/dashboard-search-function-doesnt-work-well/%s'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false, 6 => sprintf( __('Participant published. View participant'), esc_url( get_permalink($post_ID) ) ), 7 => __('Participant saved.'), 8 => sprintf( __('Participant submitted. Preview participant'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ), 9 => sprintf( __('Participant scheduled for: %1$s. Preview participant'), date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ), 10 => sprintf( __('Participant draft updated. Preview participant'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ), ); return $messages; } add_filter( 'post_updated_messages', 'my_updated_messages_participant' ); 

Bitte beachten Sie, dass ich die Suchfunktion mit diesem Code in functions.php geändert habe:

 add_filter( 'pre_get_posts', 'tgm_cpt_search' ); function tgm_cpt_search( $query ) { if ( $query->is_search ) $query->set( 'post_type', array( 'page') ); return $query; }; 

Solutions Collecting From Web of "Dashboard-Suchfunktion funktioniert nicht gut"

Ihr Problem besteht in der Änderung der Site-Suche. Sie müssen Ihren Filter mehr einschränken. Um zu verhindern, dass es im Backend ausgeführt wird, fügen Sie eine negierte is_admin() Bedingung hinzu.

 add_filter( 'pre_get_posts', 'tgm_cpt_search' ); function tgm_cpt_search( $query ) { if ( !is_admin() && $query->is_search ) $query->set( 'post_type', array( 'page') ); return $query; }; 

Dieser Filter ist immer noch ziemlich aggressiv. Es wird bei jeder Suche am Frontend ausgeführt, zum Beispiel bei einer spezialisierten Suche, die von einem Plugin hinzugefügt wurde. Wahrscheinlich möchten Sie zumindest eine is_main_query Bedingung hinzufügen.