[英]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.