Есть примеры добавления пользовательских полей в редактор категорий?
Я думаю, что я довольно близок к тому, чтобы расколоть этот орех:)
Я пытаюсь добавить набор настраиваемых полей в редактор категорий. Поскольку я не имею дело с мета-постом, я полагаю, что буду записывать значения полей пользовательских категорий в таблицу wp_term_taxonomy, а не в таблицу wp_options. Правильно ли это?
Если есть какие-либо примеры того, как это сделать, пожалуйста, поделитесь ссылкой или фрагментом кода. Я не уверен, как захватить и сохранить мою пользовательскую категорию поля.
Вот мой код...
//add the hook to place the form on the category editor screen
add_action('edit_category_form','ce4_category_admin');
//Adds the custom title box to the category editor
function ce4_category_admin($category){
echo "category: ".$category->term_id; //great, I got a reference to the term_id, now I need to get/set my custom fields with this key
?>
<table class="form-table">
<tr class="form-field">
<th scope="row" valign="top"><label for="_ce4-categoryTitle">Full Category Title</label></th>
<td><input name="_ce4-categoryTitle" id="_ce4-categoryTitle" type="text" size="40" aria-required="false" value="<?php echo get_taxonomy($category->term_id, '_ce4-categoryTitle'); ?>" />
<p class="description">The title is optional but will be used in place of the name on the home page category index.</p></td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="_ce4_fullDescription">Full Category Text for Landing Page</label></th>
<td><textarea style="height:70px; width:100%;margin-left:-5px;" name="_ce4_fullDescription" id="_ce4_fullDescription"><?php echo get_taxonomy($category->term_id, '_ce4_fullDescription'); ?></textarea>
<p class="description">This text will appear on the category landing page when viewing all articles in a category. The image, you supply above, if any, will be used here and this content will wrap around it.</p></td>
</tr>
</table>
<?php
}
//How to save the custom field data? Normally I'd use..
//add_action('save_post', 'custom_save_function');
//but this is not a post, so perhaps there's another method?
1 answers
Нет. Вы должны использовать wp_options
, потому что вы не можете создавать новые поля в таблице wp_term_taxonomy (если вы это сделаете, в следующем обновлении WP вы их потеряете).
Итак:
// the option name
define('MY_CATEGORY_FIELDS', 'my_category_fields_option');
// your fields (the form)
add_filter('edit_category_form', 'my_category_fields');
function my_category_fields($tag) {
$tag_extra_fields = get_option(MY_CATEGORY_FIELDS);
?>
<table class="form-table">
<tr class="form-field">
<th scope="row" valign="top"><label for="_ce4-categoryTitle">Full Category Title</label></th>
<td><input name="_ce4-categoryTitle" id="_ce4-categoryTitle" type="text" size="40" aria-required="false" value="<?php echo $tag_extra_fields[$tag->term_id]['my_title']; ?>" />
<p class="description">The title is optional but will be used in place of the name on the home page category index.</p></td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="_ce4_fullDescription">Full Category Text for Landing Page</label></th>
<td><textarea style="height:70px; width:100%;margin-left:-5px;" name="_ce4_fullDescription" id="_ce4_fullDescription"><?php echo $tag_extra_fields[$tag->term_id]['my_description']; ?></textarea>
<p class="description">This text will appear on the category landing page when viewing all articles in a category. The image, you supply above, if any, will be used here and this content will wrap around it.</p></td>
</tr>
</table>
<?php
}
// when the form gets submitted, and the category gets updated (in your case the option will get updated with the values of your custom fields above
add_filter('edited_terms', 'update_my_category_fields');
function update_my_category_fields($term_id) {
if($_POST['taxonomy'] == 'category'):
$tag_extra_fields = get_option(MY_CATEGORY_FIELDS);
$tag_extra_fields[$term_id]['my_title'] = strip_tags($_POST['_ce4-categoryTitle']);
$tag_extra_fields[$term_id]['my_description'] = strip_tags($_POST['_ce4_fullDescription']);
update_option(MY_CATEGORY_FIELDS, $tag_extra_fields);
endif;
}
// when a category is removed
add_filter('deleted_term_taxonomy', 'remove_my_category_fields');
function remove_my_category_fields($term_id) {
if($_POST['taxonomy'] == 'category'):
$tag_extra_fields = get_option(MY_CATEGORY_FIELDS);
unset($tag_extra_fields[$term_id]);
update_option(MY_CATEGORY_FIELDS, $tag_extra_fields);
endif;
}
Для последних двух могут быть какие-то крючки, связанные с категориями, я их не искал. Я только что адаптировал приведенный выше код из своей старой темы, в которой администратор может прикрепить изображение к пользовательскому термину таксономии...