Dans la page d'administration "posts -> all posts", j'aimerais rechercher et afficher uniquement les messages contenant un élément dans leur URL (par exemple, le caractère "-3" pour indiquer qu'il s'agit d'un message en double).
Comment cela peut-il être fait?
Vous ne pouvez pas vraiment effectuer ce type de requête à partir de l'interface utilisateur d'administration sans le coder explicitement dans un thème ou un plugin. Si vous cherchez à trouver tous les articles se terminant par -3
dans leur nom, je vous suggère d'exécuter une requête SQL, peut-être de l'associer à la magie 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,)
J'espère que cela pourra aider.
Voici un moyen de prendre en charge la recherche depost slugsdans le backend.
Appelons ce type de recherche par la chaîne slug:
dans le terme de recherche.
Exemple
Pour rechercher des slugs se terminant par -2
, nous voulons pouvoir rechercher:
slug:*-2
où * est le caractère générique.
Plugin de démonstration
Voici un plugin de démonstration qui pourrait nécessiter des tests et des ajustements supplémentaires:
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 );
Ceci est basé sur le plugin _name__like
dans ma réponse précédente ici .