( Hinweis für Moderatoren: Der Titel lautete ursprünglich "Wie kann ich den Selektor" Seitenattribute "und / oder" Seitenattribute> Vorlage "zum POSTS-Editor hinzufügen")
WP erlaubt derzeit nur die Zuordnung einer "Vorlage" zu Pages (d post_type=='page'
. H.). Ich möchte diese Funktionalität auch auf Posts (d post_type=='post'
. H.) Erweitern .
Wie kann ich das Metafeld " Seitenattribute" und insbesondere den Vorlagenumschalter zum Beitragseditor hinzufügen ?
Ich gehe davon aus, dass dies der Code ist, den ich functions.php
für mein Thema in my einfügen werde .
UPDATE: Ich habe es geschafft, das Pulldown-Menü für hartcodierte Vorlagen zu meinem Post-Editor hinzuzufügen, indem ich einfach das Auswahlfeld HTML zu meinem vorhandenen benutzerdefinierten Meta-Optionsfeld hinzufügte. Hier ist der Code, den ich dafür benutze ...
add_meta_box('categorydiv2', __('Post Options'), 'post_categories_meta_box_modified', 'post', 'side', 'high');
Und hier ist die Funktion, die die Optionen und das Auswahlfeld für die Vorlage ausgibt ...
//adds the custom categories box
function post_categories_meta_box_modified() {
global $post;
if( get_post_meta($post->ID, '_noindex', true) ) $noindexChecked = " checked='checked'";
if( get_post_meta($post->ID, '_nofollow', true) ) $nofollowChecked = " checked='checked'";
?>
<div id="categories-all" class="ui-tabs-panel">
<ul id="categorychecklist" class="list:category categorychecklist form-no-clear">
<li id='noIndex' class="popular-category"><label class="selectit"><input value="noIndex" type="checkbox" name="chk_noIndex" id="chk_noIndex"<?php echo $noindexChecked ?> /> noindex</label></li>
<li id='noFollow' class="popular-category"><label class="selectit"><input value="noFollow" type="checkbox" name="chk_noFollow" id="chk_noFollow"<?php echo $nofollowChecked ?> /> nofollow</label></li>
</ul>
<p><strong>Template</strong></p>
<label class="screen-reader-text" for="page_template">Post Template</label><select name="page_template" id="page_template">
<option value='default'>Default Template</option>
<option value='template-wide.php' >No Sidebar</option>
<option value='template-salespage.php' >Salespage</option>
</select>
</div>
<?php
}
Und schließlich der Code, um die ausgewählten Werte beim Speichern zu erfassen ...
function save_post_categories_meta($post_id) {
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return $post_id;
$noIndex = $_POST['chk_noIndex'];
$noFollow = $_POST['chk_noFollow'];
update_post_meta( $post_id, '_noindex', $noIndex );
update_post_meta( $post_id, '_nofollow', $noFollow );
return $post_id;
}
Jetzt glaube ich, dass alles, was übrig bleibt, ist, (1) die ausgewählte Vorlage zu erfassen und sie dem Post-Meta für diesen Post hinzuzufügen und (2) index.php und single.php so zu ändern, dass sie die ausgewählte Vorlage verwenden.
quelle
Antworten:
Ich hasse es, der Überbringer von schlechten Nachrichten zu sein, aber WordPress codiert die Seitenvorlagenfunktionalität fest auf den Post-Typ "Seite" , zumindest in Version 3.0 (das könnte sich in zukünftigen Versionen ändern, aber es gibt keine spezifische Initiative, die ich kenne, um sie zu ändern Dies ist also eines der wenigen Male, bei denen ich Probleme habe, herauszufinden, wie ich etwas umgehen kann, ohne den Kern zu hacken.)
Die Lösung, die ich mir ausgedacht habe, besteht darin, den relevanten Code aus dem WordPress-Kern zu kopieren und an unsere Bedürfnisse anzupassen. Hier sind die Schritte (die Zeilennummern sind von v3.0.1):
Kopieren Sie die
page_attributes_meta_box()
Funktion aus Zeile 535 von/wp-admin/includes/meta-boxes.php
und passen Sie sie an.Code einen
add_meta_boxes
Haken , um die in # 1 erstellte Metabox hinzuzufügen.Kopieren Sie die
get_page_templates()
Funktion aus Zeile 166 von/wp-admin/includes/theme.php
und passen Sie sie an.Kopieren Sie die
page_template_dropdown()
Funktion aus Zeile 2550 von/wp-admin/includes/template.php
und passen Sie sie an.Fügen Sie Ihrem Thema eine Post-Vorlage hinzu .
Codieren Sie einen
save_post
Hook , um das Speichern des Post-Template-Dateinamens beim Speichern zu ermöglichen.Codieren Sie einen
single_template
Hook , um das Laden der Beitragsvorlage für die zugeordneten Beiträge zu ermöglichen.Nun weiter damit!
1. Kopieren Sie die
page_attributes_meta_box()
FunktionAls ersten Schritt müssen Sie die
page_attributes_meta_box()
Funktion aus Zeile 535 von kopieren,/wp-admin/includes/meta-boxes.php
und ich habe beschlossen, sie umzubenennenpost_template_meta_box()
. Da Sie nur nach Seitenvorlagen gefragt haben, habe ich den Code für die Angabe eines übergeordneten Posts und für die Angabe der Reihenfolge weggelassen, wodurch der Code viel einfacher wird. Ich entschied mich auch dafür, Postmeta zu verwenden, anstatt zu versuchen, diepage_template
Objekteigenschaft wiederzuverwenden , um mögliche Inkompatibilitäten durch unbeabsichtigtes Koppeln zu vermeiden. Also hier ist der Code:2. Code einen
add_meta_boxes
HakenDer nächste Schritt ist das Hinzufügen der Metabox mit dem
add_meta_boxes
Hook:3. Kopieren Sie die
get_page_templates()
FunktionIch ging davon aus, dass es nur Sinn machen würde, zwischen Seitenvorlagen und Beitragsvorlagen zu unterscheiden, daher die Notwendigkeit einer
get_post_templates()
aufget_page_templates()
Zeile 166 basierenden Funktion/wp-admin/includes/theme.php
. Anstatt denTemplate Name:
Marker zu verwenden, für welche Seitenvorlagen diese Funktion verwendet wirdPost Template:
, wird stattdessen ein Marker verwendet, den Sie unten sehen können.Ich gefiltert auch aus Inspektion von
functions.php
(nicht sicher , wieget_page_templates()
immer richtig , ohne dass gearbeitet, aber was auch immer!) Und das einzige , was links ist zu ändern Verweise auf das Wort ,page
umpost
für die Wartung Lesbarkeit auf der Straße:4. Kopieren Sie die
page_template_dropdown()
FunktionKopieren Sie in ähnlicher Weise
page_template_dropdown()
aus Zeile 2550 von/wp-admin/includes/template.php
, umpost_template_dropdown()
es zu erstellen, und ändern Sie es einfach, umget_post_templates()
stattdessen aufzurufen :5. Fügen Sie eine Post-Vorlage hinzu
Im nächsten Schritt fügen Sie eine Post-Vorlage zum Testen hinzu. Verwenden Sie die
Post Template:
in Schritt 3 erwähnte Markierung, kopieren Sie siesingle.php
aus Ihrem Designsingle-test.php
und fügen Sie den folgenden Kommentar-Header hinzu (stellen Sie sicher,single-test.php
dass Sie etwas daran ändern, damit Sie erkennen können, dass es geladen wird, anstattsingle.php
) :Sobald Sie die Schritte 1 bis 5 ausgeführt haben, wird Ihre Metabox "Post Templates" auf Ihrer Post-Editor-Seite angezeigt:
(Quelle: mikeschinkel.com )
6. Code einen
save_post
HakenNachdem Sie den Editor entfernt haben, müssen Sie den Dateinamen Ihrer Seitenvorlage tatsächlich auf Postmeta speichern, wenn der Benutzer auf "Veröffentlichen" klickt. Hier ist der Code dafür:
7. Code einen
single_template
HakenUnd zu guter Letzt müssen Sie WordPress installieren, um Ihre neuen Post-Vorlagen verwenden zu können. Sie tun dies, indem
single_template
Sie den gewünschten Vorlagennamen für die Posts anhängen und zurückgeben, denen einer zugewiesen wurde:Und das war's auch schon!
HINWEIS , dass ich nicht in Betracht ziehen Benutzerdefinierte Beitragstypen , nur
post_type=='post'
. Meiner Meinung nach erfordert das Adressieren von benutzerdefinierten Beitragstypen die Unterscheidung zwischen den verschiedenen Beitragstypen, und obwohl dies nicht allzu schwierig ist, habe ich es hier nicht versucht.quelle
Mit Wordpress können Sie Meta zu Kategorien hinzufügen, indem Sie ein Plugin verwenden:
Um dies zu tun , müssen eine der verschiedenen Erweiterungen hinzufügen , die Meta - Kategorien ergänzt (imitiert , welche Seiten der Box raus), einfache Begriff Meta macht den Job gut.
NB WordPress 3.x wird zum Erweitern von Kategorien benötigt.
Danach können Sie verwenden:
Verwenden Sie Functions.php, um Methoden hinzuzufügen, mit denen Sie tun können, was Sie möchten, z
Das Aufrufen neuer Felder in Themen ist einfach:
Weitere Details und Beispiele: http://www.wphub.com/adding-metadata-taxonomy-terms/
quelle