it-swarm.com.de

Unterschiedliche Seitenleisteninhalte für VIELE Seiten?

Ich fahre mit einem Thema fort, das ich bereits gepostet aber mit einem anderen Blickwinkel habe. Bitte entblößen Sie mich, wenn ich versuche, so viele Informationen wie möglich zur Verfügung zu stellen.

Ich möchte einen einfachen Textbereich mit dem Namen "Quick Facts" zu einer Reihe von tierischen/kryptischen Seiten in einem Teil meiner Website hinzufügen. Dies liefert eine Liste von Fakten und Zahlen für jedes Tier.

Hier sind die Schritte, die ich unternommen habe, um dies einzurichten:

  • Linke und rechte Seitenleiste in functions.php erstellt, genannt cryptid-sidebar-widgets-left (für die linke Seitenleiste) und cryptid-sidebar-widgets (für die rechte Seitenleiste). In der linken Seitenleiste wird der Bereich "Quick Facts" angezeigt.
  • Erstellt eine neue Seitenvorlage namens cryptofact-page.php. Es erfasst einen benutzerdefinierten Header sowie die beiden neuen Seitenleisten.
  • Erstellte Seiten in WordPress mit jedem einzelnen Tier.
  • Füge ein Text-Widget in die linke Seitenleiste ein und beginne, schnelle Fakten aufzuschreiben.

Es sieht dann so aus:

enter image description here

Das Problem ist, dass diese Seitenleiste natürlich die gleichen Textdaten für alle Seiten wiederholt. Ich brauche es, um stattdessen eindeutige Daten für die Seite jedes Tieres anzuzeigen.

Ich frage mich, wie ich dieses Problem am besten angehen kann, weil ich über 100+ dieser tierischen Faktenseiten haben werde. Hier sind die Optionen, die ich zusammengetragen habe, und welche Probleme sie jeweils aufwerfen. Ich bin ein neuer Webentwickler und möchte wissen, wie eine professionelle Website dieses Problem angehen würde.

  1. Registriere Sidebars und erstelle Sidebar -___ .php für jede neue Seite: Ich kann zurück zu functions.php gehen und weiterhin über 100 verschiedene Sidebars für jede Kreatur registrieren. Von dort aus kann ich einzelne PHP-Seiten mit dem Namen sidebar-creaturename.php erstellen und sie mit benutzerdefinierten Feldern aus derselben Vorlage aufrufen.

    • In einem von mir gelesenen Tutorial kann ich Folgendes in meine Vorlage cryptofact-page.php einfügen. Gehen Sie dann zum benutzerdefinierten Feld in meinen Seiten und fügen Sie Key: sidebar und Value: (Der Name der Seitenleiste -___. Php) hinzu, die ich für dieses Tier erstellt habe. Auf diese Weise kann ich für alle Seiten dieselbe Vorlage beibehalten, aber für jede Seite eine andere Seitenleiste aufrufen.

    <?php $sidebar = get_post_meta($post->ID, "sidebar", true); get_sidebar($sidebar); ?>

User Will erzählte mir von meinem letzten Thema, wie ich diesen Code in meine Seitenvorlage oder eine Seitenleiste einfügen würde. Und führte mich in die Idee der benutzerdefinierten Felder ein.

    <?php
        var $meta = get_post_meta($post->id, "your-key", true);

        if(!empty($meta)): 
    ?>
        <aside>
            <?php echo $meta; ?>
        </aside>

    <?php endif; ?>

Das Problem war ... ich fügte dies hinzu und es riss irgendwie meine Seite auf. Ich war mir also nicht sicher, ob ich es an der falschen Stelle hinzugefügt habe oder ob ich etwas verpasst habe. Wenn jemand darauf eingehen kann, wäre er dankbar. Ich werde am Ende dieses Beitrags Code hinzufügen, der meine Vorlage cryptofact-page.php und die potenzielle Seitenleiste anzeigt, die ich verwenden werde.

  1. Widget Logic Plugin (oder ein ähnliches Plugin) verwenden: Ich verwende kein Plugin, wenn ich dies angeblich durch Codieren meiner eigenen Dateien tun kann. Dies war ein Vorschlag, den ich bei der Untersuchung meines Problems gefunden habe. Kurz gesagt, dieses Plugin fügt jedem anderen Widget ein zusätzliches Feld hinzu, das angeben kann, auf welcher Seite das jeweilige Widget angezeigt werden soll.

    • Ich füge das Text-Widget zu der einen Seitenleiste (Cryptid-Sidebar-Widgets-Left) hinzu, die ich zur Vorlage cryptofacts-page.php hinzugefügt habe. Im Bereich Text-Widget kann ich mit Widget-Logik is_page ('pageid') hinzufügen und die Seiten-ID für die Seite des Tieres notieren.
    • Ich wiederhole diesen Vorgang immer wieder, sodass es jetzt über 100 Text-Widgets gibt, die ich für diese eine Seitenleiste durchgehen muss, wenn ich den Bereich Widgets unter dem Customizer öffne. Obwohl dies einfach auszuführen ist, scheint es auch ein bisschen wie ein Cluster-f zu sein. Ich möchte, dass der Titel des Text-Widgets nur "Quick Facts" enthält, aber das würde bedeuten, dass ich viele Text-Widgets mit dem Namen "Quick Facts" hätte, ohne auf einen Blick den Unterschied zwischen ihnen erkennen zu können (wie zum Beispiel "Ich muss zurück und" Wenn ich Fakten hinzufüge oder ändere, muss ich alle manuell öffnen und herausfinden, welche Kreatur ich will.
  2. Die linke Seitenleiste vollständig loswerden. Ich habe darüber nachgedacht und ich nehme an, ich könnte die linke Seitenleiste komplett entfernen und während ich die Seite jedes Tieres in WordPress schreibe, kann ich ein Quickfact Div hinzufügen schwebt links vom Hauptinhalt des Tieres div . Dies war meine erste Idee, als ich über diese Animal Factoid-Seiten nachdachte, aber als ich nach verschiedenen Tutorials zum Hinzufügen von Spalten suchte, schlugen viele vor, stattdessen nur eine linke Seitenleiste hinzuzufügen. Es würde bedeuten, dass ich mich nicht mit Widgets oder Seitenleisten befassen muss und alle "Kurzinformationen" in den gleichen Eingabebereich wie der Rest des Inhalts gehen. Es bedeutet nur, sich mit viel mehr Divs zu befassen (was kein Problem ist, da ich mit vielen in der Sidebar zu tun habe).

Ich frage mich noch einmal, was der effizienteste Weg wäre, dies für mehr als 100 einzelne Tierseiten zu tun. Was ist die gängigste Vorgehensweise, um dies für eine große Website zu beheben?

Wordpress ist ziemlich neu für mich und die Idee von Custom Fields wurde mir erst gestern vorgestellt, also ist Beispiel 1 alles, was ich über Custom Fields wirklich weiß.

Ich suche nach anderen Möglichkeiten, um dies zu tun, und ich bin bereit, mir die Zeit zu nehmen, um zu lernen, dies richtig zu tun. Ich erwarte nicht, dass das einfach ist. Es wird langweilig werden, weil es so viele Seiten gibt, aber ich möchte einfach nicht wie ein Idiot wirken, der einen super fremden Weg geht, um dies zu tun.

Meine cryptofact-page.php Vorlage:

get_header(); ?>

<div class="cryptid-sidebar-left">
    <ul class="cryptid-sidebar-widgets-left">
<?php if ( is_active_sidebar( 'cryptid-sidebar-widgets-left' ) ) : 
          dynamic_sidebar( 'cryptid-sidebar-widgets-left' ); endif; ?>
                </ul>
            </div>

<?php if ( have_posts() ) : ?>
    <!--if there are posts, start the loop-->
<div class="cryptid-container">
    <?php while ( have_posts() ) : the_post(); ?>
        <!--get the content template for the current post format.-->
        <?php get_template_part( 'content', get_post_format() ); ?>
    <?php endwhile; ?>


</div> <!-- .cryptid-container-->

    <?php else : ?>
    <!--If no content, get content template for 'no posts found'-->
<div class="cryptid-container">
    <?php get_template_part( 'content', 'none' ); ?>
</div>
    <?php endif; ?>
<div class="cryptid-sidebar-right"> 
    <ul class="cryptid-sidebar-widgets">
    <?php if ( is_active_sidebar( 'cryptid-sidebar-widgets' ) ) :
    dynamic_sidebar( 'cryptid-sidebar-widgets' );
endif; ?>
</ul>
</div>
<?php get_footer(); 
?>

Meine Sidebar: Zur Zeit brauche ich keine separate Sidebar -____. Php Datei. Es scheint zu funktionieren, indem man sich einfach in die functions.php anmeldet und sie in der Vorlage aufruft. Aber wenn ich eines hätte (oder dafür brauchte), würde es wahrscheinlich so aussehen:

<?php
/**
 * Displays sidebar widgets for front page
 *
 * @since ctheme 1.0
 */
?>

<div class="cryptid-sidebar-left">
    <ul class="cryptid-sidebar-widgets-left">
        <?php if ( is_active_sidebar( 'cryptid-sidebar-widgets-left' ) ) :
    dynamic_sidebar( 'cryptid-sidebar-widgets-left' );
endif; ?>

</ul>
</div>

Vielen Dank für all Ihre Hilfe und dafür, dass Sie sich die Zeit genommen haben, dies zu lesen. Ich hoffe, ich habe genügend Informationen zur Verfügung gestellt, damit ich dabei unterstützt werden kann.

EDIT- Mögliche Antwort:

Also fing ich wieder an, Custom Fields zu lesen und fing an, Meta Box in meine functions.php zu codieren. Ich machte eine Pause und stellte dann fest, dass es eine einfache Lösung gab, die sich aus Beispiel 2 oben ergab: Text Widget und Widget Logic Plugin . Ich möchte dieses Problem immer noch differenzierter angehen, aber ich werde hier veröffentlichen, was ich getan habe, um das zu erreichen, was ich will.

Das einzige wirkliche Problem mit # 2 war, dass ich im Customizer-Widget-Bereich unter der linken Seitenleiste von Cryptid nur Folgendes sah:

Text Widget: Kurzinformationen

Text Widget: Kurzinformationen

Text Widget: Quick Facts (und weiter)

Wie oben erwähnt, würde ich, wenn ich zurückgehen müsste, um die Textdaten für eine dieser Kreaturen zu ändern, nicht auf einen Blick wissen, auf welche ich eingehen soll. Also habe ich einfach nach einem anderen Widget gesucht. Nachdem ich ein paar andere Text Widgets ausprobiert hatte, entschied ich mich für Enhanced Text Widget . Dieses Widget hat mir die Option gegeben, das Widget zu betiteln, aber den Titel nicht in der Ausgabe anzuzeigen.

Ich habe das Widget mit dem Namen der Kreatur betitelt. Dann gab ich dem Widget im Textfeld einfach den Titel "Quick Facts" über alle anderen Daten, die ich für die Quick Facts codiert hatte. Ich gab diesem Titel dann den gleichen Div, den der Rest der Widget-Titel bereits hatte. In meinem Fall hieß er "widgettitle".

<div class="widgettitle"><h2>Quick Facts</h2></div>

Es hat die Größe der Schrift etwas durcheinander gebracht, aber der Rest des Stils ist da. Das kann ich einfach in meiner style.css-Datei beheben.

Dann habe ich Widget-Logik verwendet, die ein zusätzliches Feld am unteren Rand jedes Widgets hinzufügt. In diesem Bereich kann ich also Folgendes eingeben, damit es nur für diese Seite angezeigt wird:

is_page('pageid')

Am Ende haben wir einen Widget-Anpassungsbereich, der jetzt so aussieht:

Verbesserter Text: Loch Ness

Verbesserter Text: Ogopogo

Verbesserter Text: Bigfoot (und weiter)

Jeder hat seine eigenen Fakten und jetzt kann ich schnell erkennen, um welches Widget es sich bei der Kreatur handelt.

Es fühlt sich ein bisschen verrückt an, das so zu machen, als würde ich einen anspruchsvolleren Weg einschlagen, aber es funktioniert und es scheint ziemlich sauber zu sein. Ich bin mir nicht sicher, wie gut die Site mit dieser x100 umgehen wird, aber es scheint nicht so schwierig oder schwer zu sein, sie zu verarbeiten.

Außerdem ist mir gerade klar geworden, dass ich etwas Ähnliches tun muss, wenn ich eine kleine Karte für jeden Tierstandort oberhalb des Quick Facts-Bereichs haben möchte (siehe Abbildung). Ich muss das auch in Angriff nehmen ... aber ich kann die Karte stattdessen einfach in den Inhalt der Seite stecken. Dies wird eine gefüllte Seitenleiste sein, wie es ist.

Weitere Hilfe wird sehr geschätzt!

FINAL EDIT UND LÖSUNG: Danke an Milo!

Ausgehend von der unten von Milo akzeptierten Antwort habe ich beschlossen, Custom Fields vollständig zu implementieren. Ich habe mir die Mühe gemacht, meine eigene Meta-Box zu erstellen, die ziemlich anständig herauskam. Am Ende kehrte ich zu Advanced Custom Fields Plugin zurück, weil die Meta-Boxen besser waren. Ich brauche das Plugin nicht einmal, aber ich habe es für den Fall behalten, dass ich es für etwas Komplizierteres in der Zukunft verwenden möchte. Mit Advanced Custom Fields Plugin (oder dem Feld Custom Fields ohne das Plugin) habe ich den benutzerdefinierten Feldschlüssel cryptid_post_class erstellt.

Ich habe dann meine Seitenvorlage (cryptofacts-page.php) geändert, um die Seitenleiste zu entfernen und an ihrer Stelle die Daten aus dem benutzerdefinierten Feld abzurufen. Es ist unbedingt erforderlich, geeignete Wrapper zu verwenden, wie dies bei der Seitenleiste von vor (Miloisawesome) der Fall ist.

get_header(); ?>

<div class="cryptid-sidebar-left">
<ul class="cryptid-sidebar-widgets-left">
    <?php
    $meta = get_post_meta(get_the_ID(), "cryptid_post_class", true);
    if( !empty($meta) ): 
    ?>
    <li>
        <?php echo $meta; ?>
    </li>
    <?php
    endif;
    ?>
</ul>
</div>


<?php if ( have_posts() ) : ?>
<!--if there are posts, start the loop-->
<div class="cryptid-container">
<?php while ( have_posts() ) : the_post(); ?>
    <!--get the content template for the current post format.-->
    <?php get_template_part( 'content', get_post_format() ); ?>
<?php endwhile; ?>

Hier einige Bilder zur Veranschaulichung.

  1. Richten Sie die Vorlage mit den richtigen Wrappern ein

enter image description here 2. Einrichten des Bereichs "Benutzerdefinierte Felder"

enter image description here 3. Endergebnis abzüglich einiger CSS-Optimierungen, da ich beim Spielen eine Sicherungsvorlage verwendet habe

enter image description here

Hoffentlich hilft dies allen neuen WordPress-Entwicklern dabei, die Dinge klarer zu machen und sich den ziemlich beeindruckenden benutzerdefinierten Feldern von WP zu nähern!

5
Nimara

Sie könnten registrieren dynamisch Seitenleisten. Wenn Sie Seitenleisten registrieren, können Sie nach all Ihren Tierseiten suchen, alle Seiten durchlaufen und für jede Seite eine eigene Seitenleiste registrieren. Durch das Hinzufügen einer Seite wird automatisch eine Seitenleiste erstellt.

Allerdings - das sind viele Seitenleisten. Für etwas, das eng mit dem Seiteninhalt verbunden ist, würde ich es eher mit benutzerdefinierten Feldern über ein benutzerdefiniertes Meta-Feld behandeln, das Ihre vordefinierten Felder enthält.

Was den Grund betrifft, warum die Verwendung von Post-Meta das Layout Ihrer Website gestört hat, handelt es sich wahrscheinlich nur um eine Frage des Markups/Stils. Am einfachsten ist es möglicherweise, das Layout mit einer Seitenleiste und einem Text-Widget zu optimieren. Kopieren Sie dann das Markup, das beim Anzeigen der Seite generiert wird, und verwenden Sie dieses als Wrapper-Markup für Ihre benutzerdefinierten Felder. In der obigen Vorlage werden Widgets als <li>s in einem <ul> angezeigt. Versuchen Sie Folgendes, wenn Sie Ihr Post-Meta hinzufügen:

<div class="cryptid-sidebar-left">
    <ul class="cryptid-sidebar-widgets-left">
        <?php
        $meta = get_post_meta(get_the_ID(), "your-key", true);
        if( !empty($meta) ): 
        ?>
        <li>
            <?php echo $meta; ?>
        </li>
        <?php
        endif;
        ?>
    </ul>
</div>
5
Milo

Ich hatte eine Website mit einem Problem, das sehr nach dem von Ihnen genannten klingt. Ich habe ein Plugin "Benutzerdefinierte Seitenleisten" verwendet, von dem ich glaube, dass es aufgerufen wurde, um eine Seitenleiste auf einer bestimmten Seite und standardmäßig zu erstellen, wenn dies nicht festgelegt ist. Suchst du danach?

0
oompahlumpa