web-dev-qa-db-ja.com

管理者のURLに基​​づいて投稿を検索しますか?

"posts - > all posts"管理ページで、URLに何らかの要素がある投稿のみを検索して見たい(例えば、重複した投稿であることを示すために文字 "-3")。

どうすればこれができますか?

1
Tal Galili

テーマやプラグインで明示的にコーディングしない限り、管理UIからこの種のクエリーを実際に実行することはできません。名前で-3で終わる記事をすべて探したい場合は、SQLクエリを実行することをお勧めします。おそらくWP-CLIの魔法と組み合わせることもできます。

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

それが役立つことを願っています。

1
kovshenin

これはバックエンドでpost slugsの検索をサポートする一つの方法です。

このような検索を検索語のslug:文字列で起動しましょう。

-2で終わるスラグを検索するには、次のものを検索できるようにします。

slug:*-2

ここで、*はワイルドカードです。

デモプラグイン

これはさらにテストと調整が必要なデモプラグインです。

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

これは私の前の答えの_name__likeプラグインに基づいています ここ

0
birgire