Beste Möglichkeit, Optionen für die Startseite in Admin zu präsentieren?

7

Ich habe eine Site mit einer benutzerdefinierten Homepage, home.php. Wie können die bearbeitbaren Homepage-Optionen im Admin-Tool richtig dargestellt werden?

Beispielsweise gibt es auf der Startseite einige benutzerdefinierte Textfelder, die im Admin-Tool bearbeitet werden können. Ich suche nach dem besten Weg, dies einzurichten, damit ein Administrator diese Optionen ändern kann.

UPDATE: Stellen Sie sich eine Website mit einer Homepage mit einem Werbe-Klappentext (Textzeichenfolge) vor, die Administratoren (Nicht-Techniker) problemlos aktualisieren kann. Ich versuche herauszufinden, wie in admin ein Bildschirm mit der Aufschrift "Welchen Werbetext möchten Sie auf der Startseite? [ _ __ _ __ _ __ _ ____ ]" angezeigt wird . Ich habe darüber nachgedacht, dies über ein Widget zu tun, aber diese Route ist umständlich und erfordert, dass ich eine spezielle Seitenleiste erstelle, um nur das einzelne Widget zu halten. Was ist der beste Weg, um dies zu erreichen?

Eric
quelle

Antworten:

11

Es gibt viele Lösungen für dieses Problem. Und jeder von ihnen ist richtig, denke ich. Es hängt davon ab, was Sie wirklich wollen und was für den Benutzer / Administrator dieser Seite am freundlichsten / klarsten ist.

Ich benutze normalerweise 3 Wege, um dies zu lösen. Welchen von ihnen habe ich gewählt? Das hängt von der Situation ab. Manchmal benutze ich 2 davon gleichzeitig.

1. Statische Titelseitenlösung.

Wenn ich eine statische Seite als Startseite festlegen kann, mache ich das. Erstellen Sie dann eine front-page.phpSeitenvorlage und definieren Sie damit, wie die Startseite / Startseite aussehen soll.

Um einige benutzerdefinierte Felder auf dieser Seite anzuzeigen / bearbeiten zu können, verwende ich das Plugin Erweiterte benutzerdefinierte Felder . Hier können Sie benutzerdefinierte Felder definieren, die für die Startseite (und vieles mehr) festgelegt wurden. Dann verwende ich eine front-page.phpVorlage, um diese benutzerdefinierten Feldwerte dort anzuzeigen, wo sie angezeigt werden sollen.

Wenn einige dieser Werte auf jeder Seite wiederholt werden sollen (in der Fußzeile, in der Kopfzeile usw.), erhalte ich diese Werte von der Startseite wie folgt:

$cf_value = get_post_meta( get_option('page_on_front'), '<CUSTOM FIELD NAME>', true );

Es ist eine sehr einfache und saubere Lösung, wenn es nicht viele Felder gibt, die auf anderen Seiten wiederholt werden sollten. Es ist benutzerfreundlich, denke ich. Wenn Sie die Startseite bearbeiten möchten, müssen Sie dies nur tun - Sie können alles im Startseiten-Editor bearbeiten.

2. Universelle Lösung.

Die andere Lösung, die ich verwende, besteht darin, einige Themenoptionen zu definieren. Es ist viel besser, wenn Sie das Erscheinungsbild der Seite (Logo, Hintergründe usw.) und nicht nur den Inhalt definieren möchten (insbesondere, wenn Sie den Inhalt nur einer Seite meinen).

Normalerweise verwende ich dazu das OptionTree- Plugin. Aber es ist nicht so schwer, das alleine zu machen.

Die Idee, dass Sie den Inhalt der Seite in Themenoptionen bearbeiten sollten, gefällt mir nicht wirklich, daher verwende ich diese Lösung nicht sehr oft.

3. Wenn dieser Inhalt immer auf anderen Seiten wiederholt wird

Manchmal müssen Sie auf jeder Seite (oder den meisten davon) und nicht nur auf der Startseite einige Werte anzeigen. Dann besteht die "schönste" Lösung meiner Meinung nach darin, diese Bereiche als Seitenleisten zu definieren und dem Benutzer zu ermöglichen, sie mithilfe von Widgets zu bearbeiten.

Wenn dieser sich wiederholende Inhalt nur eine Zeile ist (Copyright-Infozeile in der Fußzeile usw.) und nicht zu oft geändert wird, würde ich wahrscheinlich Lösung 1 verwenden. Wenn er jedoch komplexer ist oder häufig geändert wird, ist dies die Lösung am besten, denke ich.

Krzysiek Dróżdż
quelle
In der Tat front-page.phpwird in diesem Fall aufgrund der Vorlagenhierarchie mehr angezeigt.
JMau
Übrigens habe ich mir eine andere Möglichkeit ausgedacht, um dies zu handhaben: Hinzufügen einer Option zu den WP-Einstellungen (wie im Bereich "Allgemein"). Es ist nicht unbedingt der naheliegendste Ort, um es auszudrücken, aber es erledigt die Arbeit und ist irgendwie universell. Ich denke
Eric
4

Ich würde vorschlagen, eine Metabox für die home.php-Seitenvorlage zu erstellen. Dies ist mit dem ACF-Plugin (Advanced Custom Fields) problemlos möglich. Sie können sogar "ACF Lite" verwenden, wenn Sie diese in Ihr Thema integrieren möchten, anstatt das Plugin zu verwenden. Hier ist eine schnelle und einfache Möglichkeit, genau das zu implementieren, wonach Sie suchen.

  • Erstellen Sie eine benutzerdefinierte Metabox, die nur auf der Seite angezeigt wird, auf der die Vorlagendatei "home.php" verwendet wird.
  • Fügen Sie dies einfach zu Ihrer home.php-Vorlagendatei hinzu und erstellen Sie ein benutzerdefiniertes Styling.

Ich konnte die Metabox erstellen und in weniger als 5 Minuten eine benutzerdefinierte Ausgabe in der Vorlagendatei erstellen. Hier ist der Code, den ich verwendet habe, und der schrittweise Prozess.

  1. Installieren Sie das ACF-Plugin und aktivieren Sie es. (Suchen Sie nach erweiterten benutzerdefinierten Feldern mit "Elliot Condon". Sie können dies über Ihr WordPress-Dashboard oder manuell über das Wordpress-Repository hier tun: http://wordpress.org/plugins/advanced-custom-fields/
  2. Fügen Sie den Codeblock "functions.php" zur Datei "function.php" Ihres aktiven Themas hinzu.

    if(function_exists("register_field_group")) 
    {
    register_field_group(array (
        'id' => 'acf_home-page-promotional-text',
        'title' => 'Home Page Promotional Text',
        'fields' => array (
            array (
                'default_value' => '',
                'formatting' => 'none',
                'key' => 'field_51c5184b7c590',
                'label' => 'Promo Text',
                'name' => 'promo_text',
                'type' => 'text',
                'instructions' => 'What promotional text would you like?',
            ),
        ),
        'location' => array (
            array (
                array (
                    'param' => 'page_template',
                    'operator' => '==',
                    'value' => 'home.php',
                    'order_no' => 0,
                    'group_no' => 0,
                ),
            ),
        ),
        'options' => array (
            'position' => 'normal',
            'layout' => 'no_box', // change 'no_box' to 'default' for box look.
            'hide_on_screen' => array (
            ),
        ),
        'menu_order' => 0,
    ));  
    }
    
  3. Gehen Sie zur Startseite (diese Seite muss die Vorlagendatei home.php verwenden. Seite bearbeiten-> Attribute-> Vorlagen-Dropdown-Liste).

  4. Gehen Sie zu Ihrer Vorlagendatei "home.php" und fügen Sie den folgenden Code hinzu, um den Inhalt der benutzerdefinierten Metabox anzuzeigen, die in diesem Fall den "Namen" "promo_text" erhält.

    <?php if( get_field('promo_text') ) { ?>
        <h3>
            <?php echo get_field('promo_text'); ?>
        </h3>
    <?php } ?> 
    

    Hinweis: get_field ist eine Funktion des ACF-Plugins. Wenn Sie die integrierte WP-Funktion bevorzugen, können Sie Folgendes verwenden: "get_post_meta ($ post_id, $ key, $ single);" stattdessen. Hier ist ein Beispiel dafür.

    <?php
    if( get_post_meta($post->ID, $'promo_text', true) ) { ?>
    <h3>
    <?php echo get_post_meta($post->ID, 'promo_text', true); ?>
    </h3>
    <?php } ?>
    

So sieht es beim Bearbeiten der Startseite aus: Geben Sie hier die Bildbeschreibung ein Link "Größeres Bild"

Jetzt sehen Sie die Metabox. Beachten Sie, dass Sie dies problemlos ohne das Plugin tun können. Sie müssen lediglich den Plugin-Ordner in Ihren Themenordner aufnehmen und der Datei functions.php Ihres aktiven Themas ein include () hinzufügen.

Ich kann dieses Plugin nur empfehlen ... es ist sehr intuitiv und hat viele Dokumentationen. Wenn Sie dieses Plugin und var_dump () verwenden, können Sie alles sehr schnell herausfinden.

Ich hoffe das hilft!

nuResponse
quelle
2

Es ist schwierig, anhand Ihrer Frage genau zu sagen, was Sie tun. Wenn Sie jedoch die Options-API verwenden , wird get_optionein zweiter Parameter für die Standardwerte akzeptiert. Aus dem Kodex:

$no_exists_value = get_option('no_exists_value');
var_dump($no_exists_value); /* ouput false */

$no_exists_value = get_option('no_exists_value','default_value');
var_dump($no_exists_value); /* output default_value */

Wenn Sie die API für Themenanpassungen verwenden , akzeptiert get_theme_modlike get_optionauch einen zweiten Parameter für Ihre Standardwerte.

Bei beiden Optionen müssen Sie die Backend-Oberfläche erstellen. Wenn Sie die Options-API verwenden, erstellen Sie eine Konfigurationsseite add_menu_pageund / add_submenu_pageoder eine dieser verwandten Funktionen .

Wenn Sie den Theme Customizer verwenden und ich nicht sicher bin, ob dies zu Ihrem Projekt passt, gibt es ganz andere Funktionen und Techniken .

s_ha_dum
quelle
Vielen Dank für Ihre Nachricht. Zur Verdeutlichung: Stellen Sie sich eine Site mit einer Homepage mit einer Textzeichenfolge in der Mitte vor, die Administratoren (Nicht-Techniker) problemlos aktualisieren kann. Ich versuche herauszufinden, wie ein Bildschirm im Administrator angezeigt wird, auf dem steht: "Welche Werbezeichenfolge möchten Sie auf der Startseite? [__________________________]"? - Die Options-API scheint das Backend zu handhaben, aber ich sehe nichts mit der Schnittstelle zu tun. Wäre es ein Widget? Ich habe etwas Ähnliches mit benutzerdefinierten Posts und Metaboxen gemacht, aber dies ist die Homepage (home.php), also keine benutzerdefinierten Seitentyp- / Metabox-Optionen.
Eric
Am Frontend schreiben Sie eine Vorlage (oder scheinen sie zu schreiben). Sie müssen also nur get_optionoder get_theme_modin diese Vorlage schreiben .
s_ha_dum
Aber wenn ich get_option verwende, woher weiß die Administrationsoberfläche, dass sie dem Benutzer ein Feld mit Optionen anzeigt? Mit anderen Worten: Ich benötige eine absolut einfache, nicht technische Möglichkeit, damit ein Administrator diese Zeichenfolge aktualisiert, die auf der Seite angezeigt wird. Ich mache mir keine Sorgen um das Codieren der Vorlage, ich weiß nur nicht, wie ich sie im Administrator anzeigen lassen soll.
Eric
FWIW Ich habe meine Frage bearbeitet, um sie zu klären.
Eric
1

Wenn ich Ihre Frage richtig verstehe, möchten Sie ein Themenoptionsfeld erstellen, damit ein WordPress-Administrator. kann (zum Beispiel) "Hallo Welt!" Klicken Sie in einem Textfeld auf Änderungen speichern und am vorderen Ende der Website auf "Hallo Welt!". wird überall dort angezeigt, wo Sie es in Ihrer Vorlage aufrufen möchten.

Sie können dies mit der Options-API tun, über die s_ha_dum gesprochen hat, aber ich vermute, wenn Sie der Meinung sind, dass seine Antwort nicht genügend Details enthält, meinen Sie wahrscheinlich, dass sie komplizierter ist, als Sie es sich erhofft hatten.

Mein Rat an Sie wäre daher, das Optionsbaum- Plugin zu installieren, mit dem Sie schnell und einfach ein Bedienfeld für Themenoptionen (im Menü Darstellung) mit einem Textfeld erstellen können, in dem steht: "Welchen Werbetext möchten Sie auf der Startseite?" ". Dann müssen Sie nur noch den Wert dieser Option in Ihrer home.php-Vorlage mit der Option Tree-Funktion aufrufen.

Hoffe das hilft!

Tacudtap
quelle
1

Wenn ich an Ihrer Stelle wäre, hätte ich das benutzerdefinierte Wort zur Admin- / Konfigurationsseite des Themas hinzugefügt. Das wäre für mich einfacher, weil:

  • Funktionen zur Änderung der Ansicht sind bereits auf der Administrationsseite des Themas vorhanden.
  • Ich muss dort nur eine neue Variablenreferenz hinzufügen.
  • Die Promo, die beim Laden erscheint, ist definitiv Teil des spezifischen Themas und sollte daher Teil der Theme-Steuerung sein.

Der Weg in die Zukunft wäre, einen neuen Haken hinzuzufügen. Sie können entweder mit meiner bevorzugten Art und Weise gehen hier oder die allgemeine Plugin Haken Art und Weise detailliert hier

Srihari
quelle
1

Die Art und Weise, wie ich es angehen würde (und ich habe gerade etwas Ähnliches), ist die folgende:

  1. Erstellen Sie einen neuen Menüeintrag entweder im Einstellungsmenü (Einstellungen -> Einstellungen für die Startseite) oder erstellen Sie einen neuen Menüpunkt für die Startseite, z. B. unter Kommentare oder am Ende Ihres Menüs oder wo immer Sie möchten. Erstellen Sie dann in diesem neuen Menüpunkt Ihre Seite.

  2. Auf der in Schritt 1 genannten Seite erstellen Sie alle Ihre Administratoreinstellungen für die Startseite (aktuelle und zukünftige Einstellungen).

  3. Stellen Sie sicher, dass die Seite (und ihre Menü-Links) nur Administratoren über eine Rollenprüfung zur Verfügung stehen

  4. Wenn Sie möchten, können Sie Ihre obige Lösung als Teil eines Plugins erstellen, das speziell die Seite mit den zusätzlichen Einstellungen erstellt, und sie vom Thema entfernen. Denn dies ist kein themenbezogenes Problem, sondern eine Anpassung des Administrationsbereichs.

Wie ich bereits erwähnt habe, mache ich etwas in diese Richtung und habe ein Plugin erstellt. Dies hilft mir in Zukunft. Wenn ich mein Thema ändern möchte, muss ich nicht darüber nachdenken, was entfernt und in meinem Code gespeichert werden muss.

Hoffe das hilft.

Greeso
quelle