it-swarm.com.de

So überprüfe Sie, ob ich mich in einem eigenen Post-Archiv im Administrationsbereich befinde

Ich versuche, die Abfrage zu ändern, die auf der Admin-Seite meines benutzerdefinierten Beitragstyps ausgeführt wird. Diese Seite: /wp-admin/edit.php?post_type=my_venue. Normalerweise würde ich is_admin() && is_post_type_archive('my_venue') verwenden, um zu überprüfen, ob ich auf der richtigen Seite bin, bevor ich die Abfrage ändere. Ich habe jedoch meinen Beitragstyp bei 'archive' => false registriert, daher gibt is_post_type_archive() immer false zurück.

Wie kann die Abfrage nur für diese Seite am besten geändert werden?

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']);
        }
    }
}
2
joeljoeljoel

Basierend auf der /wp-admin/admin.php-Datei gibt es drei Möglichkeiten:

Methode 1

Es gibt den globalen $pagenow und den $typenow:

    global $pagenow, $typenow;
    if( 'my_venue' === $typenow && 'edit.php' === $pagenow )
    {
        // ...
    }

Methode # 2

Dann gibt es den aktuellen Bildschirm, der auch in der admin.php -Datei mit set_current_screen() eingestellt ist.

    $screen = get_current_screen();
    if( is_a( $screen, '\WP_Screen') && 'edit-myvenue' === $screen->id );
    {
        // ...
    }

hier verwenden wir die Eigenschaft id des Objekts \WP_Screen.

Wenn wir die Klasse \WP_Screen durchgehen, finden wir den Hook current_screen, der stattdessen verwendet werden könnte:

add_action( 'current_screen', function( \WP_Screen $s )
{
    if( 'edit-myvenue' === $s->id )
    {
        // ...
    }
} );

Methode # 3

Dann gibt es den load-edit.php-Hook, der vor dem pre_get_posts-Hook verfügbar ist:

add_action( 'load-edit.php', function()
{
    // Check for the post type here.
} );

In diesem Fall lautet der allgemeine Haken load-$pagenow. Hier ist die Prüfung is_admin() nicht erforderlich.

Hinweis

Wenn Sie auf die Hauptabfrage abzielen, sollten Sie $query->is_main_query() check auch in Ihrem pre_get_posts callback hinzufügen.

Denken Sie auch daran, den Teil $_GET['my_venue_ids'] zu validieren, da er möglicherweise nicht einmal im Array $_GET vorhanden ist.

Hier gibt es nichts Neues! Ich denke, wir haben alle diese Methoden auf die eine oder andere Weise gesehen, die in vielen Fragen und Antworten hier auf WPSE verwendet wurden ;-)

3
birgire