it-swarm.com.de

Erhalten Sie mehrere benutzerdefinierte Beiträge gleichzeitig in der Anfrage edit.php? Post_type

Ich plane eine benutzerdefinierte Post-Typ-Funktionalität für mein Thema und muss in der Lage sein, mehr als nur einen post_type in einer Admin-Übersichtstabelle anzuzeigen. Ich kann mir vorstellen, dass diese Anfrage wie folgt aussieht: edit.php?post_type[]=theme_slide_nivo&post_type[]=theme_slide_other. Das habe ich noch nicht ausprobiert, aber ich bin mir ziemlich sicher, dass es nicht funktionieren wird. Also Jungs, ist es möglich, ein solches Ergebnis zu erzielen, ohne den Kern zu hacken?

1
Zlatev

Ich habe es ausprobiert, um eine Vorstellung von den Problemen zu bekommen, auf die Sie stoßen werden. Mit dem folgenden Code können Sie mehrere Beitragstypen mit dem Parameter multi_post_type angeben:

add_action( 'pre_get_posts', 'wpse12970_pre_get_posts' );
function wpse12970_pre_get_posts( &$wp_query )
{
    if ( is_admin() && array_key_exists( 'multi_post_type', $_GET ) ) {
        $wp_query->set( 'post_type', $_GET['multi_post_type'] );
        add_filter( 'the_posts', 'wpse12970_the_posts', 10, 2 );
    }
}

function wpse12970_the_posts( $posts, &$wp_query )
{
    $wp_query->set( 'post_type', $GLOBALS['post_type'] );
    return $posts;
}

Das erste Problem war, dass der globale $post_type ein einzelner Typ sein sollte, da sonst andere Funktionen nicht funktionieren. Daher "schmuggeln" wir die mehreren Post-Typen unter einem anderen Namen und entfernen sie erneut, nachdem die Abfrage ausgeführt wurde.

Der Zähler oben in der Liste und die benutzerdefinierten Spalten basieren auf nur einem Beitragstyp. Wenn es viele Ergebnisse gibt, wird das Paging wahrscheinlich unterbrochen.

Wenn Sie dies tun möchten, sollten Sie Ihre eigene Listenklasse erstellen, ein untergeordnetes Element von WP_List_Table, wie WP_Posts_List_Table, aber dann für mehrere Beitragstypen. Da edit.php diese Tabelle standardmäßig lädt und ich keine Möglichkeit sehe, sie abzufangen, sollten Sie in Ihrem Plugin einen eigenen Ersatz für edit.php erstellen und diesen verwenden. Ich denke, es ist machbar und wahrscheinlich interessant, aber viel Arbeit.

2
Jan Fabry