EDIT 2
正如所承诺的,这里是插件的代码。
众所周知,自定义分类法和自定义帖子类型应该放在插件中not 在您的主题中。我已经从插件中删除了部分。
HOW IT WORKS
该分类通过插件注册为普通分类。有关这方面的任何信息,你可以去看看
register_taxonomy
. 我需要强调的部分以及与此问题相关的部分是如何插入新术语。
通过插入条款wp_insert_terms
快速简单,但如果使用不当,此代码也会影响加载时间。其想法是运行该函数一次,然后再也不运行,就像第一次运行后删除它一样。
要实现这一点,您需要将函数挂接到register_activation_hook
. 这个钩子只运行一次,即当插件被激活时,它不会在页面刷新时重新运行。只有当插件被停用并再次激活时,它才会再次启动
因此,您首先需要注册分类法,因为您无法将术语分配给不存在的分类法。注册分类后,可以插入术语。请记住,此操作只会发生一次,也就是当插件被激活时。如果需要添加术语,则需要停用插件并再次激活它
在尝试创建和插入术语之前,还需要首先检查术语是否存在。
下面是插件代码
<?php
/**
Plugin Name: Create terms
Plugin URI: http://wordpress.stackexchange.com/q/163541/31545
Description: Create terms
Version: 1.0
Author: Pieter Goosen
License: GPLv2 or later
*/
class Test_Terms {
function __construct() {
register_activation_hook( __FILE__,array( $this,\'activate\' ) );
add_action( \'init\', array( $this, \'create_cpts_and_taxonomies\' ) );
}
function activate() {
$this->create_cpts_and_taxonomies();
$this->register_new_terms();
}
function create_cpts_and_taxonomies() {
$args = array(
\'hierarchical\' => true,
\'labels\' => array(
\'name\' => _x(\'Test Tax\', \'taxonomy general name\' ),
\'singular_name\' => _x(\'Test Tax\', \'taxonomy singular name\'),
\'search_items\' => __(\'Search Test Tax\'),
\'popular_items\' => __(\'Popular Test Tax\'),
\'all_items\' => __(\'All Test Tax\'),
\'edit_item\' => __(\'Edit Test Tax\'),
\'edit_item\' => __(\'Edit Test Tax\'),
\'update_item\' => __(\'Update Test Tax\'),
\'add_new_item\' => __(\'Add New Test Tax\'),
\'new_item_name\' => __(\'New Test Tax Name\'),
\'separate_items_with_commas\' => __(\'Seperate Test Tax with Commas\'),
\'add_or_remove_items\' => __(\'Add or Remove Test Tax\'),
\'choose_from_most_used\' => __(\'Choose from Most Used Test Tax\')
),
\'query_var\' => true,
\'rewrite\' => array(\'slug\' =>\'test-tax\')
);
register_taxonomy( \'test_tax\', array( \'post\' ), $args );
}
function register_new_terms() {
$this->taxonomy = \'test_tax\';
$this->terms = array (
\'0\' => array (
\'name\' => \'Tester 1\',
\'slug\' => \'tester-1\',
\'description\' => \'This is a test term one\',
),
\'1\' => array (
\'name\' => \'Tester 2\',
\'slug\' => \'tester-2\',
\'description\' => \'This is a test term two\',
),
);
foreach ( $this->terms as $term_key=>$term) {
wp_insert_term(
$term[\'name\'],
$this->taxonomy,
array(
\'description\' => $term[\'description\'],
\'slug\' => $term[\'slug\'],
)
);
unset( $term );
}
}
}
$Test_Terms = new Test_Terms();
EDIT 1
插入术语的问题是你的钩子。
after_setup_theme
之前运行
init
, 这意味着您正在尝试向尚未注册的分类法插入术语。
我建议你wp_insert_term
函数的内部,就在下面register_taxonomy
还建议首先检查是否存在术语(term_exists
) 插入之前
示例:
// Register Custom Taxonomy
function custom_taxonomy() {
//CODE TO REGISTER TAXONOMY
if( !term_exists( \'Example Category\', \'layout\' ) ) {
wp_insert_term(
\'Example Category\',
\'layout\',
array(
\'description\' => \'This is an example category created with wp_insert_term.\',
\'slug\' => \'example-category\'
)
);
}
}
// Hook into the \'init\' action
add_action( \'init\', \'custom_taxonomy\', 0 );
请注意,这是未经测试的
ORIGINAL ANSWER
自定义分类名称(和自定义帖子类型名称)需要遵守一组非常特定的规则,否则您将遇到无法解决的陷阱。
以下是为自定义分类法(和自定义帖子类型)选择名称时的指导原则
以下是not 自定义分类名称和自定义帖子类型名称中允许使用
大写字母或camelcase
任何类型的特殊字符,下划线除外(_
)
空格分类法超过32个字符,帖子类型超过20个字符任何reserved names, 请注意,这是any 自定义命名约定,而不仅仅是分类名称。
如果分类学名称中有多个单词,则have to 用下划线而不是连字符分隔(-
). 我一直在质疑,在分类名称的URL中,连字符是进行SEO的方式。这是真的,这就是为什么有重写规则来相应地调整您的URL。切勿出于URL SEO目的更改分类名称或帖子类型名称
此外,您应该删除这些奇怪的功能。这也可能会产生问题
如果这不能解决您的问题,请添加与一起使用的代码wp_insert_term
参考号: