J'essaie de modifier la requête exécutée sur la page d'administration de mon type de publication personnalisée. Cette page: /wp-admin/edit.php?post_type=my_venue. En règle générale, je voudrais utiliser is_admin() && is_post_type_archive('my_venue')
pour vérifier si je suis sur la bonne page avant de modifier la requête. Cependant, j'ai enregistré mon type de message avec 'archive' => false
, donc maintenant is_post_type_archive()
renvoie toujours false.
Quel est le meilleur moyen de modifier la requête uniquement pour cette page?
register_post_type(
'my_venue',
[
'has_archive' => false,
]
);
add_action('pre_get_posts', 'my_venue_filters');
function my_venue_filters($query) {
if (is_admin() && is_post_type_archive('my_venue')) {
if (!empty($_GET['my_venue_ids'])) {
$query->set('post__in', $_GET['my_venue_ids']);
}
}
}
Voici trois possibilités, basées sur le fichier /wp-admin/admin.php
:
Les $pagenow
et $typenow
globaux sont disponibles:
global $pagenow, $typenow;
if( 'my_venue' === $typenow && 'edit.php' === $pagenow )
{
// ...
}
Ensuite, il y a l'écran actuel, également défini dans le fichier admin.php
avec set_current_screen()
;
$screen = get_current_screen();
if( is_a( $screen, '\WP_Screen') && 'edit-myvenue' === $screen->id );
{
// ...
}
où nous utilisons la propriété id
de l'objet \WP_Screen
.
Si nous parcourons la classe \WP_Screen
, nous trouvons le hook current_screen
, qui pourrait être utilisé à la place:
add_action( 'current_screen', function( \WP_Screen $s )
{
if( 'edit-myvenue' === $s->id )
{
// ...
}
} );
Ensuite, il y a le hook load-edit.php
, disponible avant le hook pre_get_posts
:
add_action( 'load-edit.php', function()
{
// Check for the post type here.
} );
Dans ce cas, le hook général est load-$pagenow
. Pas besoin de la is_admin()
vérifier ici.
Si vous ciblez la requête principale, vous devez alors ajouter $query->is_main_query()
check également dans votre rappel pre_get_posts
.
Rappelez-vous également de valider la partie $_GET['my_venue_ids']
, elle pourrait même ne pas exister dans le tableau $_GET
.
Rien de nouveau ici! Je pense que nous avons tous vu ces méthodes, d'une manière ou d'une autre, utilisées dans de nombreuses questions et réponses ici sur WPSE ;-)