Tambahkan bidang khusus ke Kategori

22

Saya ingin menambahkan bidang khusus ke kategori tertentu. Kategori hanya memiliki bidang-bidang berikut:

Nama:

Siput:

Induk:

Deskripsi:

Karena saya memiliki Situs Seri TV, saya ingin menambahkan beberapa bidang lagi, saya ingin sesuatu seperti ini, ketika saya membuat kategori baru (Kategori = Seri)

Nama:

Artis:

Tahun:

Mengetik:

Aliran:

Ringkasan:

Siput:

Induk:

Deskripsi:

Dan seterusnya...

Tolong ada bantuan? Terima kasih sebelumnya.

Earlee
sumber
Berikut adalah lembar contekan yang saya gunakan saat melakukan ini. Ini memiliki kait tindakan & filter yang relevan dalam satu daftar pendek. charlestonsw.com/...
Lance Cleveland

Jawaban:

24

Saya memposting How To about it seminggu yang lalu http://en.bainternet.info/2011/wordpress-category-extra-fields

semoga ini membantu.

Ohad.


Berikut detail posnya:

Hal pertama yang perlu kita lakukan adalah menambahkan bidang tambahan ke formulir edit kategori menggunakan hook edit_category_form_fields dan kita menggunakan fungsi sederhana yang akan mencetak bidang tambahan.

<?php
//add extra fields to category edit form hook
add_action ( 'edit_category_form_fields', 'extra_category_fields');

//add extra fields to category edit form callback function
function extra_category_fields( $tag ) {    //check for existing featured ID
    $t_id = $tag->term_id;
    $cat_meta = get_option( "category_$t_id");
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="cat_Image_url"><?php _e('Category Image Url'); ?></label></th>
<td>
<input type="text" name="Cat_meta[img]" id="Cat_meta[img]" size="3" style="width:60%;" value="<?php echo $cat_meta['img'] ? $cat_meta['img'] : ''; ?>"><br />
        <span class="description"><?php _e('Image for category: use full url with '); ?></span>
    </td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra1"><?php _e('extra field'); ?></label></th>
<td>
<input type="text" name="Cat_meta[extra1]" id="Cat_meta[extra1]" size="25" style="width:60%;" value="<?php echo $cat_meta['extra1'] ? $cat_meta['extra1'] : ''; ?>"><br />
        <span class="description"><?php _e('extra field'); ?></span>
    </td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra2"><?php _e('extra field'); ?></label></th>
<td>
<input type="text" name="Cat_meta[extra2]" id="Cat_meta[extra2]" size="25" style="width:60%;" value="<?php echo $cat_meta['extra2'] ? $cat_meta['extra2'] : ''; ?>"><br />
        <span class="description"><?php _e('extra field'); ?></span>
    </td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra3"><?php _e('extra field'); ?></label></th>
<td>
        <textarea name="Cat_meta[extra3]" id="Cat_meta[extra3]" style="width:60%;"><?php echo $cat_meta['extra3'] ? $cat_meta['extra3'] : ''; ?></textarea><br />
        <span class="description"><?php _e('extra field'); ?></span>
    </td>
</tr>
<?php
}

Seperti yang Anda lihat, saya menambahkan 4 bidang baru dan semuanya berada dalam larik Cat_meta [kunci] karena dengan cara itu kami hanya membuat baris pada tabel opsi untuk menyimpan semua bidang ekstra kategori, bukan baris untuk setiap bidang.

Selanjutnya kita perlu menyimpan bidang tambahan ke dalam database setelah pengguna mengirimkan formulir edit kategori dan kita melakukannya dengan menggunakan "edited_category" dengan fungsi yang akan berjalan melalui masing-masing bidang yang dikirimkan dan menyisipkannya ke database menggunakan fungsi update_option , seperti ini:

<?php
// save extra category extra fields hook
add_action ( 'edited_category', 'save_extra_category_fileds');

// save extra category extra fields callback function
function save_extra_category_fileds( $term_id ) {
    if ( isset( $_POST['Cat_meta'] ) ) {
        $t_id = $term_id;
        $cat_meta = get_option( "category_$t_id");
        $cat_keys = array_keys($_POST['Cat_meta']);
            foreach ($cat_keys as $key){
            if (isset($_POST['Cat_meta'][$key])){
                $cat_meta[$key] = $_POST['Cat_meta'][$key];
            }
        }
        //save the option array
        update_option( "category_$t_id", $cat_meta );
    }
}

Dari kode di atas, Anda dapat melihat bahwa semua bidang tambahan yang kami tambahkan disimpan dalam tabel opsi database dengan nama 'category_ID', di mana ID adalah id dari kategori tertentu yang baru saja kami edit dan itu artinya kita dapat memanggil ini data di plugin atau file tema kami dengan mudah menggunakan fungsi get_option.

katakan misalnya id kategori saya adalah 25 maka kode saya akan terlihat seperti

<?php $cat_data = get_option('category_25'); ?>

Seperti yang saya nyatakan di awal, saya perlu menampilkan gambar yang berbeda untuk setiap kategori, jadi dalam hal ini saya menambahkan beberapa baris kode ini ke category.php tema saya tepat setelah kode yang menampilkan judul kategori:

<?php
//first get the current category ID
$cat_id = get_query_var('cat');

//then i get the data from the database
$cat_data = get_option("category_$cat_id");

//and then i just display my category image if it exists
if (isset($cat_data['img'])){
    echo '<div class="category_image"><img src="'.$cat_data['img'].'"></div>';
}

Bagus dan mudah dan kita semua selesai. Hasilnya akan terlihat mirip dengan ini:

masukkan deskripsi gambar di sini

Bainternet
sumber
4
Silakan posting konten utama blog Anda ke dalam jawaban ini. Pembusukan tautan dapat terjadi, bahkan di blog Anda sendiri.
Django Reinhardt
1
Ini dijawab pada 2011 sobat :)
Bainternet
1
Maksudmu adalah?
Django Reinhardt
4
Jika menurut Anda jawaban ini tidak ada nilainya, maka harus dihapus ... Namun pertanyaan ini memiliki lebih dari 16.000 tampilan. Saya pikir pertanyaan itu tetap bermanfaat bagi orang-orang, terlepas dari usianya, dan jawaban ini akan ditingkatkan dengan memasukkan rincian dari tautan yang dimaksud.
Django Reinhardt
4
... sementara kalian sibuk memperdebatkannya (setahun yang lalu meskipun), butuh waktu kurang dari 5 menit untuk membawa semuanya ke dalam jawaban. Sangat mudah ...
MxmastaMills
18

Pada Wordpress 4.4, fungsi add_term_meta () , update_term_meta () dan get_term_meta () telah ditambahkan. Ini berarti bahwa kode yang disediakan oleh MxmastaMills dapat diperbarui untuk menggunakan pendekatan yang jauh lebih sedikit.

Ini pembaruan saya. Hanya ada satu bidang karena saya ingin menambahkan judul khusus, tetapi itu akan berfungsi sama untuk semua bidang yang ingin Anda tambahkan.

function addTitleFieldToCat(){
    $cat_title = get_term_meta($_POST['tag_ID'], '_pagetitle', true);
    ?> 
    <tr class="form-field">
        <th scope="row" valign="top"><label for="cat_page_title"><?php _e('Category Page Title'); ?></label></th>
        <td>
        <input type="text" name="cat_title" id="cat_title" value="<?php echo $cat_title ?>"><br />
            <span class="description"><?php _e('Title for the Category '); ?></span>
        </td>
    </tr>
    <?php

}
add_action ( 'edit_category_form_fields', 'addTitleFieldToCat');

function saveCategoryFields() {
    if ( isset( $_POST['cat_title'] ) ) {
        update_term_meta($_POST['tag_ID'], '_pagetitle', $_POST['cat_title']);
    }
}
add_action ( 'edited_category', 'saveCategoryFields');
Luke Simmons
sumber
2
Beberapa hal yang perlu diperhatikan: di edited_categoryhook, tag_IDakan ada di $_POSTarray, bukan di $_GET. Juga add_term_metaakan benar-benar menambahkan entri baru alih-alih mengganti entri lama. Gunakan update_term_metasebagai gantinya.
Martin Dimitrov
@MartinDimitrov Bisakah Anda memperbaiki jawaban luke-simmons dengan mengklik tombol edit? Dengan cara ini setiap orang dapat menggunakan kode terbaik yang tersedia, bahkan yang tidak memiliki kode dengan sangat baik (desainer di sini!). Terima kasih!
Hugo
1
Itu tidak menyimpan data dalam formulir
Dev
@ Ev itu memang menyimpan data, itu hanya tidak menunjukkannya kecuali Anda mengubah $ _POST menjadi $ _GET di baris kedua.
banesto
3

Kode ini berfungsi:

add_action ( 'edit_category_form_fields', function( $tag ){
    $cat_title = get_term_meta( $tag->term_id, '_pagetitle', true ); ?>
    <tr class='form-field'>
        <th scope='row'><label for='cat_page_title'><?php _e('Category Page Title'); ?></label></th>
        <td>
            <input type='text' name='cat_title' id='cat_title' value='<?php echo $cat_title ?>'>
            <p class='description'><?php _e('Title for the Category '); ?></p>
        </td>
    </tr> <?php
});
add_action ( 'edited_category', function() {
    if ( isset( $_POST['cat_title'] ) )
        update_term_meta( $_POST['tag_ID'], '_pagetitle', $_POST['cat_title'] );
});
Mario62RUS
sumber
Ini kurang canggung dari yang lain dan saya baru saja memverifikasi dengan WordPress 5.2.2
nico gawenda
1

Paul Menard memberikan contoh cara membuat dan menggunakan istilah meta di blog-nya ...
Custom meta untuk taksonomi baru di WordPress 3.0 .

Tidak ada contoh membuat tabel DB atau memeriksa $_POSTvars yang diatur, jadi Anda harus melakukan hal-hal kecil itu sendiri, tetapi sepertinya basis kode yang layak untuk dibuat di atas ... :)

t31os
sumber