webentwicklung-frage-antwort-db.com.de

Legen Sie die Standardeinstellung "Ansicht" in Admin fest

Ich suche nach einer Möglichkeit, die Standardoptionen für "Anzeigen" unter "Beitragstypen" im Administratorbereich festzulegen. Beispiel: Standardmäßig verwenden Posts standardmäßig eine "Listenansicht" anstelle von "Auszug". Ich würde dies gerne in "Auszug" ändern. Was wäre der beste Weg, um dies zu erreichen? Ich habe ein bisschen nachgeforscht, stecke aber bisher im Schlamm fest. Jede Hilfe wäre sehr dankbar. Vielen Dank!

7
Zach

Obwohl die Funktion der persistenten Einstellungen in Core Nizza ist, kann es eine Weile dauern, bis sie tatsächlich akzeptiert werden. WordPress 3.5 ist noch ziemlich weit weg.

Ergänzen wir stattdessen das globale $_REQUEST-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 den Benutzer also entscheiden, aber behalten Sie die Persistenz unter Verwendung der Metadaten des Benutzers bei:

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 post_type in alle weiter interpolieren, indem Sie die Variable $_GET['post_type'] 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 und Benutzer, keine Hacks.

9
soulseekah

Der Bildschirm für die Nachansicht wechselt von der Listenansicht zur Auszugsansicht basierend auf dem Wert des Parameters "mode" in der Abfragezeichenfolge. Wenn der "mode" -Parameter nicht gesetzt ist, verwendet WordPress standardmäßig die Listenansicht.

Leider ist dieser Parameter nicht filterbar, so dass es keine einfache Möglichkeit gibt, ihn programmgesteuert zu steuern.

Also werde ich etwas tun, was ich niemals tun werde ... Ich werde dir sagen, wie du Core hacken sollst, damit es funktioniert ...

Filter hinzufügen

Öffnen Sie /wp-admin/includes/class-wp-posts-list-table.php und suchen Sie die prepare_items()-Methode (um Zeile 81).

In Zeile 99 prüft WordPress, ob der Parameter "mode" in der Anforderung festgelegt wurde, und verwendet diesen Parameter, um die globale Variable $mode festzulegen:

$mode = empty( $_REQUEST['mode'] ) ? 'list' : $_REQUEST['mode'];

Wir werden diese Zeile ändern, um die Standardeinstellung zu filtern. Ändern Sie diese Zeile in:

$mode = empty( $_REQUEST['mode'] ) ? apply_filters( 'default-posts-list-mode', 'list' ) : $_REQUEST['mode'];

Gehen Sie nun in die functions.php-Datei Ihres Themas und fügen Sie den folgenden Code hinzu:

add_filter( 'default-posts-list-mode', 'my_default_posts_list_mode' );
function my_default_posts_list_mode( $default ) {
    return 'excerpt';
}

Dies hängt sich in den Filter ein und kehrt standardmäßig zum Ausschnittsmodus zurück.

Da meine persönliche Regel zum Hacken von Core erfordert, dass alle Hacks wieder in das Projekt einbezogen werden (auf diese Weise können sie in Core integriert werden und gelten nicht mehr als Hack), habe ich für diese Verbesserung ein Trac-Ticket geöffnet und hat den obigen Code als Patch eingereicht. Bitte wägen Sie das Ticket ab, damit es für 3.5 in den Core gelangen kann (wir sind zu spät im Zyklus für 3.4, aber wir können versuchen, dies für die nächste Version durchzusetzen).

5
EAMann

Okay, so kurz nachdem ich ein Kopfgeld ausgesetzt 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).

<?php

add_action( 'admin_init', 'my_admin_init' ); // initiate admin hook

function my_admin_init() {
    // if mode is not set redirect to a default mode.
    if(!isset($_GET['mode'])) {
        if('forms' == $_GET['post_type'] || 'client-quotes' == $_GET['post_type'] ) {
            wp_redirect( admin_url( 'edit.php?mode=excerpt&' . http_build_query( $_GET ) ) );
            exit;
        }
    }
}

?>

HINWEIS: Ich empfehle die Vorgehensweise von Soulseekah. Wenn Sie nicht möchten, dass der Benutzer sich an seine Wahl erinnert, können Sie meinen Code ein wenig in seinen Code integrieren. ANMERKUNG 2: Wenn/wenn der Patch von EAMann Teil des Kerns ist, ist seine Methode offensichtlich die beste, da Sie nicht den langen Weg zurücklegen müssen. Im Moment gefällt es mir einfach nicht, da Sie die Kerndateien bearbeiten müssen.

2
Hosh Sadiq