it-swarm.com.de

Nach Posts suchen, die auf ihrer URL im Admin basieren?

Auf der Administrationsseite "posts -> all posts" möchte ich nur Posts mit einem bestimmten Element in der URL suchen und anzeigen (z. B. das Zeichen "-3", um anzuzeigen, dass es sich um einen doppelten Post handelt).

Wie geht das?

1
Tal Galili

Sie können diese Art von Abfrage nicht über die Benutzeroberfläche des Administrators ausführen, ohne sie explizit in einem Design oder Plugin zu codieren. Wenn Sie alle Posts finden möchten, deren Name mit -3 endet, empfehle ich Ihnen, eine SQL-Abfrage auszuführen. Koppeln Sie sie möglicherweise auch mit etwas WP-CLI-Magie:

wp post list --fields=url --post__in=$(wp db query "SELECT ID FROM wp_posts WHERE post_name LIKE '%-3';" | paste -s -d,)

Hoffentlich hilft das.

1
kovshenin

Hier ist eine Möglichkeit, die Suche nach post slugs im Backend zu unterstützen.

Rufen wir diese Art der Suche über die Zeichenfolge slug: im Suchbegriff auf.

Beispiel

Um nach Schnecken zu suchen, die mit -2 enden, möchten wir in der Lage sein, nach Folgendem zu suchen:

slug:*-2

wo * ist der Platzhalter.

Demo Plugin

Hier ist ein Demo-Plugin, das möglicherweise weitere Tests und Anpassungen benötigt:

add_filter( 'posts_search', function( $search, \WP_Query $q ) use ( &$wpdb )
{
    // Nothing to do
    if(    
           ! did_action( 'load-edit.php' ) 
        || ! is_admin() 
        || ! $q->is_search() 
        || ! $q->is_main_query() 
    )
        return $search;

    // Get the search input
    $s = $q->get( 's' );

    // Check for "slug:" part in the search input
    if( 'slug:' === mb_substr( trim( $s ), 0, 5 ) )
    {
        // Override the search query 
        $search = $wpdb->prepare(
            " AND {$wpdb->posts}.post_name LIKE %s ",
            str_replace( 
                [ '**', '*' ], 
                [ '*',  '%' ],  
                mb_strtolower( 
                    $wpdb->esc_like( 
                        trim( mb_substr( $s, 5 ) ) 
                    ) 
                )
            )
        );

        // Adjust the ordering
        $q->set('orderby', 'post_name' );
        $q->set('order', 'ASC' );
    }
    return $search;
}, PHP_INT_MAX, 2 );

Dies basiert auf dem _name__like Plugin in meiner vorherigen Antwort hier .

0
birgire