簡體   English   中英

在自定義帖子類型分類中保存新字段

[英]Save new field in custom post type taxonomy

我在我的自定義帖子類型分類法中添加了一個上傳圖像。 職位類型是portfolio ,分類法是portfolio-category

輸入字段和圖像的添加(打開wordpress上傳器)均有效。 但是,由於我基本上是從我的類別(常規帖子)中復制的,因此某些選項無法保存。 我添加了這樣的表單字段:

//Category image
if ( ! function_exists( 'mytheme_image_category_field' ) ){
    function mytheme_image_category_field( $tag ) {
        $t_id = $tag->term_id;
        $cat_meta = get_option("category_$t_id");
        ?>
        <tr class="form-field">
            <th scope="row" valign="top"><label for="extra1"><?php esc_attr_e('Featured Image', 'mytheme'); ?></label></th>
            <?php print_r($cat_meta, true); ?>
            <td>
                <div class="portfolio_category_image">
                <?php if(isset($cat_meta['taxonomy_portfolio_category_image']) && $cat_meta['taxonomy_portfolio_category_image']!=''): ?>
                <img width="254" src="<?php echo esc_url($cat_meta['taxonomy_portfolio_category_image']);?>" />
                <?php endif; ?>
                </div>
                <input type="text" class="portfolio_category_image_upload" name="Cat_meta[taxonomy_portfolio_category_image]" value="<?php (isset($cat_meta['taxonomy_portfolio_category_image']) && $cat_meta['taxonomy_portfolio_category_image']!='') ? esc_attr_e($cat_meta['taxonomy_portfolio_category_image']) : '' ;?>">
                <input type="button" class="button portfolio_upload_image_button" name="image_upload" value=" <?php esc_attr_e('Upload Image', 'mytheme');?>">
                <input type="button" class="button portfolio_remove_image_button" name="remove_image_upload" value=" <?php esc_attr_e('Remove Image', 'mytheme');?>">
            </td>
        </tr>
    <?php
    }
}

add_action ( 'portfolio-category_edit_form_fields', 'mytheme_image_category_field');

if ( ! function_exists( 'mytheme_extra_add_image_upload_field' ) ){
    function mytheme_extra_add_image_upload_field( $tag ) {
        $t_id = (is_object($tag)) ? $tag->term_id:'';
        $cat_meta = get_option("category_$t_id");
        ?>
        <div class="form-field">
            <label for="extra1"><?php esc_attr_e('Featured Image', 'mytheme'); ?></label>
            <input type="text" class="portfolio_category_image_upload" name="Cat_meta[taxonomy_portfolio_category_image]" value="<?php echo (isset($cat_meta['taxonomy_portfolio_category_image']) && $cat_meta['taxonomy_portfolio_category_image'] != '') ? esc_attr($cat_meta['taxonomy_portfolio_category_image']) : '' ;?>">
            <input type="button" class="button portfolio_upload_image_button" name="Cat_meta[taxonomy_portfolio_category_image]" value=" <?php esc_attr_e('Upload Image', 'mytheme');?>">
            <input type="button" class="button portfolio_remove_image_button" name="remove_image_upload" value=" <?php esc_attr_e('Remove Image', 'mytheme');?>">
        </div>
        <?php
    }
}

add_action ( 'portfolio-category_add_form_fields', 'mytheme_extra_add_image_upload_field');

明顯的問題是,在自定義帖子類型中,我沒有在wp_options表中寫入任何內容,因此$cat_meta = get_option("category_$t_id"); 什么都不會得到

回顯$t_id時得到的是我的術語ID。 所以我知道我需要以某種方式使用terms來保存我的選擇。 但是,這就是我被困住的地方。 get_terms('portfolio-category')將正確輸出我所擁有的每一項,但是我沒有在那里上傳的圖像。

JavaScript是(如果有人需要對其進行測試):

$(document).on('click', '.portfolio_upload_image_button', portfolio_upload_image_button);

function portfolio_upload_image_button(e) {
    e.preventDefault();
    var $input_field = $(this).prev();
    var $image = $('.portfolio_category_image');
    var custom_uploader = wp.media.frames.file_frame = wp.media({
        title: 'Add Image',
        button: {
            text: 'Add Image'
        },
        multiple: false
    });
    custom_uploader.on('select', function() {
        var attachment = custom_uploader.state().get('selection').first().toJSON();
        $input_field.val(attachment.url);
        $image.html('<img width="254" src="'+attachment.url+'" />');
    });
    custom_uploader.open();
}

$(document).on('click', '.portfolio_remove_image_button', portfolio_remove_image_button);

function portfolio_remove_image_button(e){
    e.preventDefault();
    var $input_field = $('.portfolio_category_image_upload');
    var $image = $('.portfolio_category_image');

    $input_field.val('');
    $image.html('');
}

這適用於我的常規職位,但不適用於我的CPT。

編輯

我應該使用wp_insert_term嗎? 要更新我的分類法條款?

好的,所以我遵循了這個這篇文章,並弄清楚了。

class Category_Taxonomy_Image{

    function __construct(){

        add_action( 'portfolio-category_add_form_fields', array( $this, 'add_tax_image_field' ) );
        add_action( 'portfolio-category_edit_form_fields', array( $this, 'edit_tax_image_field' ) );
        // saving
        add_action( 'edited_portfolio-category', array( $this, 'save_tax_meta' ), 10, 2 );
        add_action( 'create_portfolio-category', array( $this, 'save_tax_meta' ), 10, 2 );

    }

    public function add_tax_image_field(){
    ?>
        <div class="form-field">
            <label for="term_meta[tax_image]"><?php esc_html_e('Category Featured Image', 'mytheme'); ?></label>
            <input type="text" class="portfolio_category_image_upload" name="term_meta[tax_image]" id="term_meta[tax_image]" value="" />
            <input type="button" class="button portfolio_upload_image_button" name="image_upload" value=" <?php esc_attr_e('Upload Image', 'mytheme');?>">
            <input type="button" class="button portfolio_remove_image_button" name="remove_image_upload" value=" <?php esc_attr_e('Remove Image', 'mytheme');?>">
            <p class="description"><?php esc_html_e('Add URL to image for the category image', 'mytheme'); ?></p>
        </div><!-- /.form-field -->
    <?php
    }

    public function edit_tax_image_field( $term ){
        $term_id = $term->term_id;
        $term_meta = get_option( "taxonomy_$term_id" );
        $image = $term_meta['tax_image'] ? $term_meta['tax_image'] : '';
    ?>
        <tr class="form-field">
            <th scope="row">
                <label for="term_meta[tax_image]"><?php esc_html_e('Category Featured Image', 'mytheme'); ?></label>
                <td>
                    <div class="portfolio_category_image">
                    <?php if(isset($image) && $image!=''): ?>
                        <img width="254" src="<?php echo esc_url($image);?>" />
                    <?php endif; ?>
                    </div>
                    <input type="text" class="portfolio_category_image_upload" name="term_meta[tax_image]" id="term_meta[tax_image]" value="<?php echo esc_url( $image ); ?>" />
                    <input type="button" class="button portfolio_upload_image_button" name="image_upload" value=" <?php esc_attr_e('Upload Image', 'mytheme');?>">
                    <input type="button" class="button portfolio_remove_image_button" name="remove_image_upload" value=" <?php esc_attr_e('Remove Image', 'mytheme');?>">
                    <p class="description"><?php esc_html_e('Add URL to image for the category image', 'mytheme'); ?></p>
                </td>
            </th>
        </tr>
    <?php
    }

    public function save_tax_meta( $term_id ){
        if ( isset( $_POST['term_meta'] ) ) {
            $t_id = $term_id;
            $term_meta = array();
            $term_meta['tax_image'] = isset ( $_POST['term_meta']['tax_image'] ) ? esc_url( $_POST['term_meta']['tax_image'] ) : '';
            update_option( "taxonomy_$t_id", $term_meta );
        }
    }

}

$cat_tax_image = new Category_Taxonomy_Image();

關鍵是將它們保存到wp_options表中並添加到正確的鈎子中。 主要是:

add_action( '{custom-taxonomy-name}_add_form_fields', 'add_new_custom_fields');
add_action( '{custom-taxonomy-name}_edit_form_fields', 'add_edit_custom_fields');

add_action( 'create_{custom-taxonomy-name}', 'save_custom_taxonomy_meta');
add_action( 'edited_{custom-taxonomy-name}', 'save_custom_taxonomy_meta');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM