2

有谁知道如何在创建类别时添加自定义元字段并在 WordPress 的循环中获取它们?我想知道如何在不破解 WordPress 核心的情况下做到这一点,但如果我这样做了——它不会成为未来更新 WordPress 的障碍。

我发现一个接近的插件是Wp-Category-Meta,但它不能在编辑类别中添加复选框作为字段。

截屏

这将非常有用,因为用户可以使某些类别成为“特色”,然后代码可以在循环中使用该元值来以不同的方式设置“特色”类别的样式。

4

4 回答 4

3

问题: Wordpress 没有存储分类的“元”值的结构或方法。

2017 年更新:WP 4.4+ 有“术语元”!

要使用术语元,请使用这些:
update_term_meta()
get_term_meta()
delete_term_meta()
add_term_meta()

以下操作仍然有效!:)

补充阅读:4.4 分类综述

WP 版本 <= 4.3.x 和常见操作的解决方案

行动:

  1. create_categoryedit_category类别编辑
  2. category_add_form_fieldscategory_edit_form类别表单字段

有比我介绍的更多的操作,但它们似乎已被弃用(根据 developer.wordpress.org)。

我选择我选择的操作的原因:
- 它们适用于 WordPress 4.4.2
- 由于缺乏文档,我认为这些是替换已弃用的新操作...

功能:

  1. get_option( $option, $default );
  2. update_option( $option, $new_value, $autoload );

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 ); 

创建还是编辑?

您可能想知道您是在创建还是保存一个类别 - 这还没有记录(据我所知),但来自测试:

  1. Edit save => $tag_objectisobject并且包含一些属性,最值得注意的是:
    • term_id
    • taxonomy
    • filter
  2. 创建保存 =>$tag_object只是一个常规的string“类别” - 我想这可能会在未来改变......

一般分类

一般分类法也有类似的操作 - 检查这些操作

于 2016-03-16T10:29:58.307 回答
2

Jaz,看起来您在原始问题中提到的插件已更新为包含一个复选框字段(包含在 v1.2.3 中

于 2011-05-17T19:12:32.570 回答
1

我认为Category SEO Meta Tags插件会对您有所帮助。

于 2011-05-16T12:21:47.070 回答
1

可以在此处找到此插件的更新和重构版本:

https://wordpress.org/plugins/custom-taxonomy-category-and-term-fields/

还添加了 WYSIWYG 编辑器字段类型。

于 2014-07-20T09:10:27.230 回答