Sınıflandırmaya metabox eklemek için basit ama eksiksiz bir örneğe ihtiyacınız var


18

Artık WordPress 4.4 çıktı, yeni harika terim meta işlevlerini kullanmaya başlayabiliriz!

Yine de, Taksonomiye temel bir metin alanının nasıl ekleneceğine dair basit bir öğretici yok gibi görünüyor. Renk seçiciyle ilgili tüm kodu kaldırarak ve basit bir metin giriş alanı ile değiştirerek Justin Tadlock'un bu harika öğreticisini ihtiyaçlarıma uyarlamaya çalıştım ... ama çalışmıyor.

Birisi çıplak kemikli bir çalışma kodu örneği sağlayabilir mi? Veri doğrulama olmadan, notlar, renk seçiciler ... Sınıflandırma ekle / Sınıflandırmayı düzenle sayfasına yalnızca en az bir metin kutusu eklenir.

Güncelleme: Bu arada, bu kod snippet'inin birkaç varyasyonunu yaptım:

Kategori alanına meta alanı ekle :
https://gist.github.com/ms-studio/543a0f7dd8ac05ccf037

Yazı Etiketine terim meta alanı ekle :
https://gist.github.com/ms-studio/2d78ad3839e05ece2e48

Özel Sınıflandırmaya terim meta alanı ekleyin :
https://gist.github.com/ms-studio/fc21fd5720f5bbdfaddc

Özel Sınıflandırmaya birkaç terim meta alanı ekleyin : https://gist.github.com/ms-studio/aeae733f5fd9fc524bbc


Lütfen geçerli kod snippet'inizi ve nasıl başarısız olduğunu gönderin.
birgire

@birgire orijinal kodumu göndermediğim için üzgünüm, ama zaten çok dağınıktı ve temiz bir örnekle başlamayı tercih ederim.
Manu

Yanıtlar:


13

Bu, kategorilerinize 'TERM META TEXT' adlı bir alan ekleyecektir. Ben nonce çıkardı ama gerçekten geri gitmek gerektiğini düşünüyorum. Ayrıca, bazı sanitizasyon vs hiçbiri daha iyi. Bu örnek, ihtiyacınız olabilecek veya olmayabilecek javascript ve CSS kancalarını içerir, ancak tüm parçaların nasıl bir araya geldiğini hızlı bir şekilde görebilirsiniz.

Zevk almak!

// REGISTER TERM META

add_action( 'init', '___register_term_meta_text' );

function ___register_term_meta_text() {

    register_meta( 'term', '__term_meta_text', '___sanitize_term_meta_text' );
}

// SANITIZE DATA

function ___sanitize_term_meta_text ( $value ) {
    return sanitize_text_field ($value);
}

// GETTER (will be sanitized)

function ___get_term_meta_text( $term_id ) {
  $value = get_term_meta( $term_id, '__term_meta_text', true );
  $value = ___sanitize_term_meta_text( $value );
  return $value;
}

// ADD FIELD TO CATEGORY TERM PAGE

add_action( 'category_add_form_fields', '___add_form_field_term_meta_text' );

function ___add_form_field_term_meta_text() { ?>
    <?php wp_nonce_field( basename( __FILE__ ), 'term_meta_text_nonce' ); ?>
    <div class="form-field term-meta-text-wrap">
        <label for="term-meta-text"><?php _e( 'TERM META TEXT', 'text_domain' ); ?></label>
        <input type="text" name="term_meta_text" id="term-meta-text" value="" class="term-meta-text-field" />
    </div>
<?php }


// ADD FIELD TO CATEGORY EDIT PAGE

add_action( 'category_edit_form_fields', '___edit_form_field_term_meta_text' );

function ___edit_form_field_term_meta_text( $term ) {

    $value  = ___get_term_meta_text( $term->term_id );

    if ( ! $value )
        $value = ""; ?>

    <tr class="form-field term-meta-text-wrap">
        <th scope="row"><label for="term-meta-text"><?php _e( 'TERM META TEXT', 'text_domain' ); ?></label></th>
        <td>
            <?php wp_nonce_field( basename( __FILE__ ), 'term_meta_text_nonce' ); ?>
            <input type="text" name="term_meta_text" id="term-meta-text" value="<?php echo esc_attr( $value ); ?>" class="term-meta-text-field"  />
        </td>
    </tr>
<?php }


// SAVE TERM META (on term edit & create)

add_action( 'edit_category',   '___save_term_meta_text' );
add_action( 'create_category', '___save_term_meta_text' );

function ___save_term_meta_text( $term_id ) {

    // verify the nonce --- remove if you don't care
    if ( ! isset( $_POST['term_meta_text_nonce'] ) || ! wp_verify_nonce( $_POST['term_meta_text_nonce'], basename( __FILE__ ) ) )
        return;

    $old_value  = ___get_term_meta_text( $term_id );
    $new_value = isset( $_POST['term_meta_text'] ) ? ___sanitize_term_meta_text ( $_POST['term_meta_text'] ) : '';


    if ( $old_value && '' === $new_value )
        delete_term_meta( $term_id, '__term_meta_text' );

    else if ( $old_value !== $new_value )
        update_term_meta( $term_id, '__term_meta_text', $new_value );
}

// MODIFY COLUMNS (add our meta to the list)

add_filter( 'manage_edit-category_columns', '___edit_term_columns' );

function ___edit_term_columns( $columns ) {

    $columns['__term_meta_text'] = __( 'TERM META TEXT', 'text_domain' );

    return $columns;
}

// RENDER COLUMNS (render the meta data on a column)

add_filter( 'manage_category_custom_column', '___manage_term_custom_column', 10, 3 );

function ___manage_term_custom_column( $out, $column, $term_id ) {

    if ( '__term_meta_text' === $column ) {

        $value  = ___get_term_meta_text( $term_id );

        if ( ! $value )
            $value = '';

        $out = sprintf( '<span class="term-meta-text-block" style="" >%s</div>', esc_attr( $value ) );
    }

    return $out;
}

// ADD JAVASCRIPT & STYLES TO COLUMNS

add_action( 'admin_enqueue_scripts', '___admin_enqueue_scripts' );

function ___admin_enqueue_scripts( $hook_suffix ) {

    if ( 'edit-tags.php' !== $hook_suffix || 'category' !== get_current_screen()->taxonomy )
        return;

    // ADD YOUR SUPPORTING CSS / JS FILES HERE
    // wp_enqueue_style( 'wp-color-picker' );
    // wp_enqueue_script( 'wp-color-picker' );

    add_action( 'admin_head',   '___meta_term_text_print_styles' );
    add_action( 'admin_footer', '___meta_term_text_print_scripts' );
}

// PRINT OUR CUSTOM STYLES

function ___meta_term_text_print_styles() { ?>

    <style type="text/css">
        .column-__term_meta_text { background-color:rgb(249, 249, 249); border: 1px solid lightgray;}
        .column-__term_meta_text .term-meta-text-block { display: inline-block; color:darkturquoise; }
    </style>
<?php }

// PRINT OUR CUSTOM SCRIPTS

function ___meta_term_text_print_scripts() { ?>

    <script type="text/javascript">
        jQuery( document ).ready( function( $ ) {
             $input_field = $( '.term-meta-text-field' );
             // console.log($input_field); // your input field
        } );
    </script>
<?php }

Çok teşekkürler, bu gerçekten yararlı! Bir terim modifiye edildiğinde SÜRE META METİN alan güncellenir, ancak: Ama olduğu gibi kod uygularken, bir tane sorunla karşılaşmak değil bir terim oluşturulduğunda kurtardı.
Manu

Başka bir test sitesinde denedim ve aynı davranışı gördüm - terim oluşturma üzerine meta metnin kaydedilmemesi dışında her şey iyi çalışıyor. İçindeki nonce doğrulamayı devre dışı bıraktım ___save_term_meta_text( $term_id )... ve bu sorunu düzeltti, yeni bir terim oluştururken meta metin artık kaydedildi! Bu yüzden cevabınızı kabul ediyorum, çünkü tam olarak başlamak için ihtiyacım olanı sağlıyor.
Manu

1
Soruna neyin sebep olduğunu anladım: nonce ___add_form_field_term_meta_text()işlevde tanımlanmamıştı . Ekledikten sonra, tüm beklendiği gibi çalışır.
Manu

1
WP zaten bazılarını yerleştirdiği için ek nonces ile kirliliğe gerek yok. Sadece yapacak check_admin_referer( 'add-tag', '_wpnonce_add-tag' );ve check_admin_referer( 'update-tag_' . (int) $_POST['tag_ID'] )içinde 'edit_category've 'category_category'eylemler.
Z. Zlatev

___register_term_meta_text()İşlevinizde, üçüncü parametrenin kullanımdan kaldırıldığını ve bunun yerine bir diziyle değiştirildiğini belirtmek gerekir . Bunun gibi bir şey kullanmanız gerekir:$args = array( 'type' => 'string', 'description' => 'A text field', 'single' => 'false', 'sanitize_callback' => '___sanitize_term_meta_weare_product', 'auth_callback' => null, 'show_in_rest' => false, ); register_meta( 'term', '__term_meta_text', $args );
Frits
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.