web-dev-qa-db-de.com

Wie man einen Beitrag nach ID in wp-admin sucht

Wenn ich zu einer Post-Auflistung im Admin-Bereich gehe, kann ich nur nach Post-Titel oder Inhalt suchen.

Ich möchte eine Funktion hinzufügen, die nach Posts oder Seiten-IDs sucht, um es den Redakteuren zu erleichtern, den gesuchten Post zu finden.

Ich muss es im Plugin-Ordner implementieren. Irgendwelche Ideen? Ich habe keine Ahnung, wo ich jetzt anfangen soll. Danke Leute!

 enter image description here 

2
Nobody

Lösung 1

Hier ist eine Lösung, die die Aktion pre_get_posts verwendet, um die ursprüngliche Suchabfrage zu überschreiben und stattdessen nach der Beitrags-ID zu suchen. Dies ist der Ansatz, den ich generell empfehlen würde.

/**
 * Allows posts to be searched by ID in the admin area.
 * 
 * @param WP_Query $query The WP_Query instance (passed by reference).
 */
add_action( 'pre_get_posts','wpse_admin_search_include_ids' );
function wpse_admin_search_include_ids( $query ) {
    // Bail if we are not in the admin area
    if ( ! is_admin() ) {
        return;
    }

    // Bail if this is not the search query.
    if ( ! $query->is_main_query() && ! $query->is_search() ) {
        return;
    }   

    // Get the value that is being searched.
    $search_string = get_query_var( 's' );

    // Bail if the search string is not an integer.
    if ( ! filter_var( $search_string, FILTER_VALIDATE_INT ) ) {
        return;
    }

    // Set WP Query's p value to the searched post ID.
    $query->set( 'p', intval( $search_string ) );

    // Reset the search value to prevent standard search from being used.
    $query->set( 's', '' );
}

Lösung 2

Hier ist eine alternative Lösung, die den posts_search-Filter verwendet, um den SQL-Code direkt zu ändern, wenn eine Suche im Administratorbereich mit einem numerischen Wert durchgeführt wird.

/**
 * Modify search SQL enabling searching by post ID.
 *
 * @param string   $search Search SQL for WHERE clause.
 * @param WP_Query $wp_query   The current WP_Query object.
 */
add_filter( 'posts_search', 'wpse_posts_search_post_id', 10, 2 );
function wpse_posts_search_post_id( $search, $wp_query ) {
    // Bail if we are not in the admin area
    if ( ! is_admin() ) {
        return $search;
    }

    // Bail if this is not the search query.
    if ( ! $wp_query->is_main_query() && ! $wp_query->is_search() ) {
        return $search;
    }   

    // Get the value that is being searched.
    $search_string = get_query_var( 's' );

    // Bail if the search string is not an integer.
    if ( ! filter_var( $search_string, FILTER_VALIDATE_INT ) ) {
        return $search;
    }

    // This appears to be a search using a post ID.
    // Return modified posts_search clause.
    return "AND wp_posts.ID = '" . intval( $search_string )  . "'";
}

Mit diesem Code

Jede dieser Lösungen kann einfach in ein Plugin umgewandelt werden, indem das Snippet in einer Datei mit dem Namen admin-search-by-post-id.php in einem Ordner mit dem Namen admin-search-by-post-id gespeichert wird (zum Beispiel). Weitere Informationen finden Sie im Entwicklerhandbuch zur Plugin-Erstellung .

Beispiel für einen Plugin-Header:

<?php
/*
Plugin Name:  Admin Search by Post ID
Plugin URI:   
Description:  Allows posts to be searched using IDs in the admin area.
Version:      0.0.1
Author:       
Author URI:   
License:      GPL2
License URI:  https://www.gnu.org/licenses/gpl-2.0.html
Text Domain:  your_text_domain
Domain Path:  /languages
*/
3
Dave Romsey