Obwohl es gut ist, die Funktion der dauerhaften Einstellungen im Kern zu haben, kann es eine Weile dauern, bis sie tatsächlich akzeptiert werden. WordPress 3.5 ist noch ziemlich weit weg.
Erweitern wir $_REQUEST
stattdessen das globale Array.
add_action( 'load-edit.php', 'wpse34956_force_excerpt' );
function wpse34956_force_excerpt() {
$_REQUEST['mode'] = 'excerpt';
}
Dadurch werden die Modi gesperrt und der excerpt
Modus wird ständig erzwungen. Lassen Sie uns also den Benutzer entscheiden, aber halten Sie ihn unter Verwendung der Metadaten des Benutzers dauerhaft:
add_action( 'load-edit.php', 'wpse34956_persistent_posts_list_mode' );
function wpse34956_persistent_posts_list_mode() {
if ( isset( $_REQUEST['mode'] ) ) {
// save the list mode
update_user_meta( get_current_user_id(), 'posts_list_mode', $_REQUEST['mode'] );
return;
}
// retrieve the list mode
if ( $mode = get_user_meta( get_current_user_id(), 'posts_list_mode', true ) )
$_REQUEST['mode'] = $mode;
}
Sie können weiter post_type
in alle interpolieren, indem Sie die $_GET['post_type']
Variable berücksichtigen, sofern verfügbar.
add_action( 'load-edit.php', 'wpse34956_persistent_posts_list_mode' );
function wpse34956_persistent_posts_list_mode() {
// take into account post types that support excerpts
$post_type = isset( $_GET['post_type'] ) ? $_GET['post_type'] : '';
if ( $post_type && !post_type_supports( $post_type, 'excerpt' ) )
return; // don't care
if ( isset( $_REQUEST['mode'] ) ) {
// save the list mode
update_user_meta( get_current_user_id(), 'posts_list_mode' . $post_type, $_REQUEST['mode'] );
return;
}
// retrieve the list mode
if ( $mode = get_user_meta( get_current_user_id(), 'posts_list_mode' . $post_type, true ) )
$_REQUEST['mode'] = $mode;
}
Viola! Permanenter Listenmodus pro Beitragstyp pro Benutzer, keine Hacks.
Der Bildschirm für die Nachansicht wechselt basierend auf dem Wert des Parameters "mode" in der Abfragezeichenfolge von der Listenansicht zur Ausschnittsansicht. Wenn der Parameter "mode" nicht eingestellt ist, verwendet WordPress standardmäßig die Listenansicht.
Leider kann dieser Parameter nicht gefiltert werden, sodass es keine einfache Möglichkeit gibt, ihn programmgesteuert zu steuern.
Also werde ich etwas tun, was ich nie tue ... Ich werde dir sagen, wie man Core hackt, damit das funktioniert ...
Filter hinzufügen
Öffnen Sie
/wp-admin/includes/class-wp-posts-list-table.php
und finden Sie dieprepare_items()
Methode (um Zeile 81).In Zeile 99 prüft WordPress, ob der Parameter "mode" in der Anforderung festgelegt wurde oder nicht, und verwendet diesen, um die globale
$mode
Variable festzulegen:Wir werden diese Zeile ändern, um die Standardeinstellung zu filtern. Ändern Sie diese Zeile in:
Gehen Sie nun in die
functions.php
Datei Ihres Themas und fügen Sie den folgenden Code hinzu:Dadurch wird der Filter angeschlossen und der Auszugsmodus wird standardmäßig zurückgegeben.
Da meine persönliche Regel zum Hacken von Core erfordert, dass alle Hacks wieder in das Projekt eingebracht werden (auf diese Weise können sie in Core gerollt werden und nicht mehr als Hack gelten), habe ich ein Trac-Ticket für diese Verbesserung geöffnet und den obigen Code übermittelt als Patch. Bitte wiegen Sie das Ticket ab, damit es für 3.5 in den Kern gelangt (für 3.4 sind wir zu spät im Zyklus, aber wir können versuchen, dies für die nächste Version durchzusetzen).
quelle
$_REQUEST
Globale hackenadd_action( 'edit.php', ... )
und dergleichen, während wir darauf warten, dass der Kern den Patch / Vorschlag annimmt?$_REQUEST
Objekt selbst zu hacken . Sie können gerne eine weitere Antwort veröffentlichen, in der erläutert wird, wie dies getan werden kann.Okay, kurz nachdem ich ein Kopfgeld gezahlt hatte, kam ich auf die folgende Lösung. Dies ist in jeder Hinsicht das Standardverhalten, mit der Ausnahme, dass die Auszugsansicht für den gewünschten Beitragstyp ausgewählt wird (anstelle der Standardlistenansicht).
HINWEIS: Ich empfehle Soulseekahs Ansatz. Wenn Sie nicht möchten, dass er sich an die Wahl des Benutzers erinnert, können Sie meinen Code ein wenig in seinen Code integrieren. ANMERKUNG 2: Wenn / wenn EAManns Patch Teil des Kerns ist, wäre seine Methode offensichtlich die beste, da Sie nicht den weiten Weg gehen müssten. Ich mag es im Moment einfach nicht, da Sie die Kerndateien bearbeiten müssen.
quelle
paged
jedoch nicht berücksichtigt (Paginierung) + wäre die Verwendungwp_redirect
anstelle von rohen Headern möglicherweise etwas "sauberer", und ich bin mir nicht sicher, wie effizient die Umleitung ist. Davon abgesehen sieht es interessant aus. Auch$_GET['post_type']
könnte nicht eingestellt werden, in einer Warnung ergibt , wenn Fehler eingeschaltet sind. +1 für die Mühe und die Geduld. Ich wusste nicht, dass die Frage so alt war.$_GET
Variablen zu berücksichtigen . Wie für das$_GET['post_type']
, ehrlich gesagt, war ich auch nicht , dass die Mühe gemacht , wie ich es nur erforderlich für einen benutzerdefinierten Post - Typ zu sein, die immer da sein würde. Offensichtlich kann dies weggelassen werden. @ EAMann, Sie haben Recht, dies war jedoch die beste Lösung, die ich finden konnte. Ich habe versucht,$_GET
Parameter manuell einzustellen, in der Hoffnung, dass sie vor dem Lesen eingestellt werden, aber dies schien nicht der Fall zu sein.