( Catatan Moderator: Judul awalnya "Bagaimana saya bisa menambahkan pemilih" Halaman Atribut "dan / atau" Atribut Halaman> Templat "ke editor POSTS")
WP saat ini hanya mengizinkan penugasan "templat" ke Halaman (mis post_type=='page'
.) Saya juga ingin memperluas fungsi ini ke Posting (mis post_type=='post'
.)
Bagaimana saya bisa menambahkan kotak meta "Atribut Halaman" dan lebih khusus lagi, pengalih template ke editor posting?
Saya berasumsi ini adalah kode yang akan saya tempatkan pada functions.php
tema saya.
UPDATE: Saya telah berhasil menambahkan menu pulldown template yang telah di-hardcoded ke editor posting saya, dengan hanya menambahkan html kotak pilih ke kotak opsi meta kustom saya yang ada. Inilah kode yang saya gunakan untuk itu ...
add_meta_box('categorydiv2', __('Post Options'), 'post_categories_meta_box_modified', 'post', 'side', 'high');
Dan inilah fungsi yang menuliskan opsi dan kotak pilih templat ...
//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
}
Dan akhirnya, kode untuk menangkap nilai yang dipilih di save ...
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;
}
Sekarang, saya percaya semua yang tersisa adalah (1) menangkap template yang dipilih dan menambahkannya ke meta posting untuk posting ini dan (2) memodifikasi index.php dan single.php sehingga menggunakan template yang dipilih.
sumber
Jawaban:
Benci menjadi pembawa berita buruk tetapi WordPress hardcodes fungsionalitas Templat Halaman ke tipe posting "halaman" , setidaknya dalam v3.0 (yang mungkin berubah di versi masa depan tetapi tidak ada inisiatif khusus saya sadar untuk mengubahnya Jadi, ini adalah salah satu dari beberapa kali saya berjuang untuk mencari cara untuk mengatasi sesuatu tanpa meretas inti.)
Solusi yang saya buat adalah pada dasarnya menyalin kode yang relevan dari inti WordPress dan memodifikasinya sesuai kebutuhan kita. Berikut langkah-langkahnya (nomor baris berasal dari v3.0.1):
Salin
page_attributes_meta_box()
fungsi dari baris 535/wp-admin/includes/meta-boxes.php
dan modifikasi agar sesuai.Kode
add_meta_boxes
kail untuk menambahkan metabox yang dibuat di # 1.Salin
get_page_templates()
fungsi dari baris 166/wp-admin/includes/theme.php
dan modifikasi agar sesuai.Salin
page_template_dropdown()
fungsi dari baris 2550/wp-admin/includes/template.php
dan modifikasi agar sesuai.Tambahkan Template Posting ke tema Anda.
Beri kode
save_post
kait untuk memungkinkan penyimpanan nama file templat pos saat disimpan.Beri kode pada
single_template
kail untuk mengaktifkan pemuatan templat kiriman untuk kiriman terkait.Sekarang lanjutkan dengan itu!
1. Salin
page_attributes_meta_box()
fungsiSebagai langkah pertama kami, Anda perlu menyalin
page_attributes_meta_box()
fungsi dari baris 535 dari/wp-admin/includes/meta-boxes.php
dan saya telah memilih untuk mengganti namanyapost_template_meta_box()
. Karena Anda hanya meminta templat halaman, saya menghapus kode untuk menentukan pos induk dan untuk menentukan urutan yang membuat kode lebih sederhana. Saya juga memilih untuk menggunakan postmeta untuk ini daripada mencoba menggunakan kembalipage_template
properti objek untuk menghindari dan ketidakcocokan potensial yang disebabkan oleh kopling yang tidak disengaja. Jadi, inilah kodenya:2. Kode
add_meta_boxes
kailLangkah selanjutnya adalah menambahkan metabox menggunakan
add_meta_boxes
hook:3. Salin
get_page_templates()
fungsiSaya berasumsi hanya masuk akal untuk membedakan antara templat halaman dan templat pos sehingga diperlukan
get_post_templates()
fungsi berdasarkanget_page_templates()
dari baris 166 of/wp-admin/includes/theme.php
. Namun alih-alih menggunakanTemplate Name:
penanda templat halaman mana yang menggunakan fungsi ini, gunakanPost Template:
penanda yang bisa Anda lihat di bawah.Saya juga menyaring inspeksi
functions.php
(tidak yakin bagaimana caraget_page_templates()
kerjanya dengan benar tanpa itu, tapi apa pun!) Dan satu-satunya yang tersisa adalah mengubah referensi katapage
kepost
untuk pembacaan pemeliharaan di jalan:4. Salin
page_template_dropdown()
fungsiDemikian pula salin
page_template_dropdown()
dari baris 2550 dari/wp-admin/includes/template.php
untuk membuatpost_template_dropdown()
dan cukup mengubahnya untuk meneleponget_post_templates()
sebagai gantinya:5. Tambahkan Template Posting
Langkah selanjutnya adalah menambahkan templat pos untuk pengujian. Dengan menggunakan
Post Template:
penanda yang disebutkan dalam langkah # 3 salinsingle.php
dari tema Anda kesingle-test.php
dan tambahkan tajuk komentar berikut ( pastikan untuk memodifikasi sesuatusingle-test.php
sehingga Anda dapat mengatakan itu sedang memuat alih-alihsingle.php
) :Setelah Anda melakukan langkah-langkah # 1 hingga # 5 Anda dapat melihat metabox "Templat Posting" Anda muncul di halaman editor posting Anda:
(sumber: mikeschinkel.com )
6. Kode
save_post
kaitSekarang setelah Anda memiliki editor yang sudah dihapus, Anda harus benar-benar menyimpan nama file templat halaman Anda ke postmeta ketika pengguna mengklik "Terbitkan". Berikut kode untuk itu:
7. Kode
single_template
kaitDan terakhir, Anda harus benar-benar mendapatkan WordPress untuk menggunakan templat posting baru Anda. Anda melakukannya dengan mengaitkan
single_template
dan mengembalikan nama templat yang Anda inginkan untuk pos-pos yang telah ditetapkan satu:Dan itu saja!
CATATAN bahwa saya tidak mempertimbangkan Jenis Pos Kustom , hanya
post_type=='post'
. Menurut pendapat saya mengatasi jenis posting kustom akan membutuhkan pembedaan antara berbagai jenis posting dan, meskipun tidak terlalu sulit, saya tidak mencoba di sini.sumber
Wordpress memungkinkan Anda untuk menambahkan Meta ke Kategori menggunakan plugin:
Untuk melakukan ini, Anda perlu menambahkan salah satu dari berbagai ekstensi yang menambahkan meta ke kategori (meniru halaman apa yang keluar dari kotak), Simple Term Meta melakukan pekerjaan dengan baik.
NB WordPress 3.x diperlukan untuk memperluas Kategori.
Setelah itu Anda bisa menggunakan:
Gunakan Functions.php untuk menambahkan metode untuk melakukan apa yang Anda inginkan misalnya
Memanggil bidang baru dalam tema itu mudah:
Lebih detail dan contoh: http://www.wphub.com/adding-metadata-taxonomy-terms/
sumber