有谁知道如何在创建类别时添加自定义元字段并在 WordPress 的循环中获取它们?我想知道如何在不破解 WordPress 核心的情况下做到这一点,但如果我这样做了——它不会成为未来更新 WordPress 的障碍。
我发现一个接近的插件是Wp-Category-Meta,但它不能在编辑类别中添加复选框作为字段。
这将非常有用,因为用户可以使某些类别成为“特色”,然后代码可以在循环中使用该元值来以不同的方式设置“特色”类别的样式。
有谁知道如何在创建类别时添加自定义元字段并在 WordPress 的循环中获取它们?我想知道如何在不破解 WordPress 核心的情况下做到这一点,但如果我这样做了——它不会成为未来更新 WordPress 的障碍。
我发现一个接近的插件是Wp-Category-Meta,但它不能在编辑类别中添加复选框作为字段。
这将非常有用,因为用户可以使某些类别成为“特色”,然后代码可以在循环中使用该元值来以不同的方式设置“特色”类别的样式。
问题:
Wordpress 没有存储分类的“元”值的结构或方法。
要使用术语元,请使用这些:
update_term_meta()
get_term_meta()
delete_term_meta()
add_term_meta()
以下操作仍然有效!:)
补充阅读:4.4 分类综述
create_category
和edit_category
类别编辑category_add_form_fields
和category_edit_form
类别表单字段有比我介绍的更多的操作,但它们似乎已被弃用(根据 developer.wordpress.org)。
我选择我选择的操作的原因:
- 它们适用于 WordPress 4.4.2
- 由于缺乏文档,我认为这些是替换已弃用的新操作...
update_option
有两个很大的能力:
a)当这样的选项还不存在时,它会创建选项
除非您需要指定 add_option() 的可选参数,否则 update_option() 对于添加和更新选项都是有用的。
b)$new_value
可以是整数、字符串、数组或对象。
你可能会问,为什么要使用数组/对象?...好吧,因为每个选项 = 1 个数据库行 => 您可能希望将类别选项存储在一行中:)
function my_category_form_fields($tag_object){
//output/display extra form fields, e.g. by echo ...
//ADD EXTRA SPECIFIC FIELD TO LATER CHECK IF IT'S CATEGORY SAVE/EDIT!
//(see note at 'edit_category' action...)
if( !empty($tag_object['term_id']) ){
//edit category form specific
//...load existing options with get_option( $option, $default );
} else {
//create category form specific
}
}
function my_category_save(){
//CHECK FOR YOUR EXTRA SPECIFIC FIELD TO CHECK IF IT'S CATEGORY SAVE/EDIT
//(see note at 'edit_category' action...)
//SECURITY CHECK
if( empty($_POST['EXTRA_SPECIFIC_FIELD']) || ! current_user_can('manage_categories') )
return null;
//save your form values using update_option()
//Recommendation:
//Add "category_" prefix and $category_id to your option name!
}
add_action( 'create_category', 'my_category_save', 10, 1 );
//Runs when a category is updated/edited,
//INCLUDING when a post or blogroll link is added/deleted or its categories are updated
//(which causes the count for the category to update)
add_action( 'edit_category', 'my_category_save', 10, 1 );
add_action( 'category_add_form_fields', 'my_category_form_fields', 10, 1 );
add_action( 'category_edit_form', 'my_category_form_fields', 10, 1 );
您可能想知道您是在创建还是保存一个类别 - 这还没有记录(据我所知),但来自测试:
$tag_object
isobject
并且包含一些属性,最值得注意的是:
term_id
taxonomy
filter
$tag_object
只是一个常规的string
“类别” - 我想这可能会在未来改变......一般分类法也有类似的操作 - 检查这些操作。
Jaz,看起来您在原始问题中提到的插件已更新为包含一个复选框字段(包含在 v1.2.3 中)
我认为Category SEO Meta Tags插件会对您有所帮助。
可以在此处找到此插件的更新和重构版本:
https://wordpress.org/plugins/custom-taxonomy-category-and-term-fields/
还添加了 WYSIWYG 编辑器字段类型。