问题描述
编辑:WordPress v4.4 以上的重要说明
这个问题使用了一个很好的解决方法,因为在 WordPress 的旧版本中缺少真正的术语 meta,但自从 WordPress v4.4,real term meta has been introduced 发布以来,绝对是现在的方式。
Here’s a post that looks like a good starting point for term meta in WordPress 4.4+
我要离开这个问题,因为它可能仍然对于处理较旧代码的人有用,但是想要添加上面的注释,以便开始从新的元数据实现开始的开发人员将处于正确的轨道。
编辑结束
我已经能够利用 @Bainternet 的 this 超级教程来添加自定义字段进行分类。我已经调整了标记,并添加了单独的回调,将字段添加到 「添加新类别」 管理页面。我的代码是在这个问题的结尾。
我已经陷入困境了自定义字段输入显示在添加新类别页面上,但该字段未保存。
我注意到添加新的分类页面使用 ajax,这可能是问题的一部分。我尝试禁用 JS,但仍遇到同样的问题。我一直在挖掘核心寻找一个钩子,但找不到一个。网上有各种各样的教程,但是他们似乎依靠分类编辑界面进行出价。
关于如何使这项工作有任何想法?
/**
* Add extra fields to custom taxonomy edit and add form callback functions
*/
// Edit taxonomy page
function extra_edit_tax_fields($tag) {
// Check for existing taxonomy meta for term ID.
$t_id = $tag->term_id;
$term_meta = get_option( "taxonomy_$t_id" ); ?>
<tr class="form-field">
<th scope="row" valign="top"><label for="cat_Image_url"><?php _e( 'Category Navigation Image URL' ); ?></label></th>
<td>
<input type="text" name="term_meta[img]" id="term_meta[img]" value="<?php echo esc_attr( $term_meta['img'] ) ? esc_attr( $term_meta['img'] ) : ''; ?>">
<p class="description"><?php _e( 'Enter the full URL to the navigation image used for this category.' ); ?></p>
</td>
</tr>
<?php
}
add_action( 'category_edit_form_fields', 'extra_edit_tax_fields', 10, 2 );
// Add taxonomy page
function extra_add_tax_fields( $tag ) {
// Check for existing taxonomy meta for term ID.
$t_id = $tag->term_id;
$term_meta = get_option( "taxonomy_$t_id" ); ?>
<div class="form-field">
<label for="cat_Image_url"><?php _e( 'Category Navigation Image URL' ); ?></label>
<input type="text" name="term_meta[img]" id="term_meta[img]" value="<?php echo esc_attr( $term_meta['img'] ) ? esc_attr( $term_meta['img'] ) : ''; ?>">
<p class="description"><?php _e( 'Enter the full URL to the navigation image used for this category.' ); ?></p>
</div>
<?php
}
add_action( 'category_add_form_fields', 'extra_add_tax_fields', 10, 2 );
// Save extra taxonomy fields callback function.
function save_extra_taxonomy_fields( $term_id ) {
if ( isset( $_POST['term_meta'] ) ) {
$t_id = $term_id;
$term_meta = get_option( "taxonomy_$t_id" );
$cat_keys = array_keys( $_POST['term_meta'] );
foreach ( $cat_keys as $key ) {
if ( isset ( $_POST['term_meta'][$key] ) ) {
$term_meta[$key] = $_POST['term_meta'][$key];
}
}
// Save the option array.
update_option( "taxonomy_$t_id", $term_meta );
}
}
add_action( 'edited_category', 'save_extra_taxonomy_fields', 10, 2 );
//add_action( '...Can't find hook to enable saving custom fields when adding a new term
最佳解决方案
解决了!
add_action( 'create_category', 'save_extra_taxonomy_fields', 10, 2 );
支持 Category Meta plugin 。我从 WP repo 下载了各种类别的 meta 插件,并且可以在添加新屏幕上添加元数据。我挖掘了代码,发现了难以捉摸的 create_ {term} 钩子。
次佳解决方案
我认为你引用的教程很棒,我已经基于这个代码了。它将分类 menu_category
的元数据存储在该分类法的添加和编辑表单上,并将其显示在编辑表单中。选项表项将为术语 ID 24 的 taxomomy_24_metas
。
add_action('menu_category_edit_form_fields','menu_category_edit_form_fields');
add_action('menu_category_add_form_fields','menu_category_edit_form_fields');
add_action('edited_menu_category', 'menu_category_save_form_fields', 10, 2);
add_action('created_menu_category', 'menu_category_save_form_fields', 10, 2);
function menu_category_save_form_fields($term_id) {
$meta_name = 'order';
if ( isset( $_POST[$meta_name] ) ) {
$meta_value = $_POST[$meta_name];
// This is an associative array with keys and values:
// $term_metas = Array($meta_name => $meta_value, ...)
$term_metas = get_option("taxonomy_{$term_id}_metas");
if (!is_array($term_metas)) {
$term_metas = Array();
}
// Save the meta value
$term_metas[$meta_name] = $meta_value;
update_option( "taxonomy_{$term_id}_metas", $term_metas );
}
}
function menu_category_edit_form_fields ($term_obj) {
// Read in the order from the options db
$term_id = $term_obj->term_id;
$term_metas = get_option("taxonomy_{$term_id}_metas");
if ( isset($term_metas['order']) ) {
$order = $term_metas['order'];
} else {
$order = '0';
}
?>
<tr class="form-field">
<th valign="top" scope="row">
<label for="order"><?php _e('Category Order', ''); ?></label>
</th>
<td>
<input type="text" id="order" name="order" value="<?php echo $order; ?>"/>
</td>
</tr>
<?php
}
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。