(Hinweis: Bei dieser Frage ging es ursprünglich um benutzerdefinierte Felder, aber @MikeSchinkel hatte eine bessere Lösung für benutzerdefinierte Beitragstypen.)
Auf meiner Site habe ich mehrere Seiten, auf denen ich die gleichen Daten in der Seitenleiste anzeigen möchte. Zum Beispiel in einer Struktur wie dieser:
-Home
-Cars
-Volvo 850 overview
-Volvo 850 tech spec
-Volvo 850 pictures
-Porsche 911 overview
-Porsche 911 tech spec
-Porsche 911 pictures
-Roads
-Route 66 overview
-Route 66 history
-Route 66 pictures
-Pan-American Highway overview
-Pan-American Highway history
-Pan-American Highway pictures
Ich möchte, dass alle Volvo 850-Seiten dieselben Daten in der Seitenleiste anzeigen, alle Porsche-Seiten einen anderen Datensatz (z. B. Speed, Maker usw.).
Die Straßenseiten hätten ihre eigenen Daten für jede Straße. Autos und Straßen hätten auch eine eigene Seitenvorlage, und die Art und Weise, wie ich denke, dass die richtige Seitenleiste angezeigt wird, ist in sidebar.php ungefähr so:
if ( is_page_template('car-profile-template.php') ) :
// show car widgets
Hier ist eine Beispielseite, die Volvo 850 Pictures-Seite. Die gleiche (linke) Seitenleiste sollte auf den anderen Volvo 850-Seiten angezeigt werden, während das Material auf der rechten Seite nur Seiteninhalt ist.
| Home •Cars Roads |
--------------------------------------------------------
| Overview | Volvo 840 Pictures |
| Tech Spec | (some pics) |
| •Pictures | |
------------------ |
| -Specs- | |
| Volvo 850 | |
| Speed:150mph | |
| Maker:Volvo | |
| Download PDF | |
------------------ |
| -Rating- | |
| Style:3 | |
| Safety:5 | |
| Reliablity:4 | |
------------------ |
In diesem Beispiel sollten die beiden Seitenleisten-Widgets "Spezifikationen" und "Bewertung" ihre Informationen von einem benutzerdefinierten Beitragstyp erhalten. Gibt es eine Methode, die für den Endbenutzer leicht zu bearbeiten wäre, was bedeutet, dass er diese benutzerdefinierten Daten nur einmal eingeben müsste? Es ist möglicherweise nicht erforderlich, dass jedes der Felder separat ist (dh alle Spezifikationen können in ein Editorfeld eingegeben werden, und alle Bewertungen können in das Auszugsfeld eingegeben werden. Vielleicht)
quelle
Antworten:
AKTUALISIEREN:
Basierend auf der Aktualisierung der Frage muss ich meiner Meinung nach explizit angeben, dass das, was in der Frage gestellt wird, mit der folgenden Antwort getan werden kann. Es wurden nur benutzerdefinierte Felder im benutzerdefinierten Beitragstyp "Auto" für jedes der Elemente verwendet, auf denen Sie angezeigt werden möchten alle Seiten für ein bestimmtes Auto.
Wenn Sie dies tun möchten, codieren Sie einfach die Seitenleiste in die
single-car.php
unten angegebene Vorlagendatei undif
bestimmen Sie anhand Ihrer Anweisung, welcher Inhalt für die verschiedenen URLs angezeigt werden soll. Sie könnten sich die Mühe machen, Ihre Seitenleiste zu widgetisieren und ein benutzerdefiniertes Widget zu entwickeln, in dem das Widget die Informationen für die aktuelle Post-ID abruft. Aber warum beides, es sei denn, Sie erstellen dies als Thema, das andere Personen verwenden können?Es gibt tatsächlich eine Reihe von subtil unterschiedlichen Möglichkeiten, um dies zu erreichen, aber die, die ich vorschlage, sollte sich wunderbar für Ihre Bedürfnisse wundern.
Hallo @cannyboy:
Ich weiß eigentlich nicht, wie ich benutzerdefinierte Felder am besten über Posts hinweg teilen kann. Aber das könnte nur die rote Fahne sein, die Sie brauchen. Wenn etwas vielleicht zu schwer erscheint ...
Ein alternativer Ansatz?
... könnten Sie es sich anders überlegen, es zu entwerfen ? Ich denke, Sie sind viel besser dran, einen benutzerdefinierten Post-Typ von "Auto" zu erstellen, und dann können Sie alles für jede "Seite" in einem Post-Typ für ein Auto speichern . Hier sind einige Beispiel-URLs:
Informationen zu benutzerdefinierten Beitragstypen
Weitere Informationen zu benutzerdefinierten Beitragstypen finden Sie unter Antworten auf die folgenden Fragen:
Ein benutzerdefinierter Beitragstyp und eine Umschreiberegel
Um benutzerdefinierte Beitragstypen und die mehreren Seiten zu implementieren, verwenden Sie den folgenden Code, der Ihren benutzerdefinierten Beitragstyp "Auto" registriert und dann eine Umschreiberegel für Ihre Fahrzeugseiten festlegt . Fügen Sie diesen Code in die
functions.php
Datei Ihres Themas oder in ein Plugin ein, je nachdem, was Sie bevorzugen:Ein Auto -spezifische Thema Vorlagendatei
Dann werden Sie benötigen ein Auto -spezifische Vorlagendatei in Ihrem Thema ; Der Standardname hierfür wäre
single-car.php
. Ich habe eine Starter-Vorlage für Sie codiert, die alle drei URLs (die (Übersicht) , 'Tech-Spezifikationen' und 'Bilder' ) in einer Vorlage rendert, indem ich eine if- Anweisung verwende, um zu bestimmen, welcher Inhalt gerendert werden soll:Beachten Sie im obigen Beispiel, dass ich mit der Verwendung von sehr simpel bin
get_post_meta()
. Eine reale Site müsste dort viel komplexer sein.Vorlagen-Tags, auch bekannt als Hilfsfunktionen
Natürlich habe ich einige Vorlagen-Tags, auch Hilfsfunktionen genannt, verwendet, um die Komplexität der Vorlagendatei unter den Bedingungen der if- Anweisung zu minimieren . Hier sind sie und Sie können diese auch in die
functions.php
Datei Ihres Themas einfügen:Screenshots gefüllt mit Custom Post Type Love
Sobald Sie den gesamten Code installiert und einen Autopost wie Volvo 850 hinzugefügt haben , können Sie ihn wie in den folgenden Screenshots verwenden:
Übersichtsseite
(Quelle: mikeschinkel.com )
Seite mit technischen Daten
Bilder Seite
quelle
Ich denke, jemand hat dies möglicherweise bereits auf die andere Frage beantwortet, die Sie gestellt haben (über übergeordnete Seiten / Zwischenseiten), aber ich denke, der beste Weg, Ihre Daten zu strukturieren, ist, basierend auf dem, was Sie beschrieben haben:
Auf diese Weise müssen Sie die Metafelder nur einmal eingeben - auf der übergeordneten Seite - und auf den untergeordneten Seiten können Sie diese Metadaten von der übergeordneten Seite abrufen:
Eine noch bessere Möglichkeit, dies zu organisieren, wäre natürlich, für jedes Automodell einen einzigen benutzerdefinierten Beitragstyp zu verwenden, in dem alle Fahrzeuginformationen gespeichert sind, und die verschiedenen Unterseiten basierend auf einer GET-Anforderung anzuzeigen, die an die Seite übergeben und in verwendet wird Die Seitenvorlage als Schalter, um zu bestimmen, welche Vorlage angezeigt werden soll. Auf diese Weise können Sie das Duplizieren von Daten vollständig vermeiden und das Hinzufügen weiterer Informationen zur Vorlage später vereinfachen ...
Mehr Details...
Ich habe es auf verschiedene Arten gemacht. Auf einer Site, auf der ich Agenten (Unternehmensvertreter) als benutzerdefinierten Beitragstyp hatte, habe ich deren Beiträge verwendet, um alle Daten zu dieser Person zu speichern, diese Seite jedoch nie angezeigt. Stattdessen hatte ich eine Seite "Agent Listing", eine Seite "Agent Performance Record" und eine Seite "Contact This Agent", die immer mit einer GET-Variablen aufgerufen wurden und Informationen aus dem entsprechenden Beitrag anzeigten. Der Permalink würde also ungefähr so aussehen wie site.com/agent-listing/?agent=john-smith .
Auf einer anderen Site habe ich alle Informationen auf einer Seite eingerichtet und alle drei Ansichten für diese Seite in die Seitenvorlage integriert. In Ihrem Fall würde das ungefähr so aussehen wie site.com/cars/volvo-850/?pictures .
Und in die Seitenvorlage würden Sie oben im Inhalt eine Prüfung für diese Variable einfügen:
quelle
Wenn Sie keine benutzerdefinierten Beitragstypen erstellen möchten und einfach eine benutzerdefinierte Seitenleiste für jede Seite oder jeden Beitrag einfügen möchten, können Sie das Graceful Sidebar Plugin verwenden. Auf diese Weise können Sie benutzerdefinierte Seitenleisteninhalte direkt im Beitrags- oder Seitenbearbeitungsbildschirm mithilfe zusätzlicher Felder erstellen, die als ordnungsgemäßer Titel und ordnungsgemäßer Inhalt bezeichnet werden. Diese werden dann im Seitenleistenbereich als Widget angezeigt, wenn dieser Beitrag oder diese Seite in Ihrem Blog angezeigt wird. Weitere Informationen zu diesem Plugin finden Sie unter http://www.mlynn.org/graceful-sidebar-plugin
quelle