2015-10-12 59 views
0

我向我的自定義帖子類型分類添加了上傳圖片。帖子類型爲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?要更新我的分類術語?

回答

0

好吧,我跟着thisthis後,我想通了。

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'); 
相關問題