我想使用短代码创建自定义分类法。我不想使用任何插件。我在插件中使用以下代码:
add_shortcode(\'taxnomy\',\'project_taxonomy_init\');
add_filter( \'widget_text\', \'do_shortcode\');
function project_taxonomy_init() {
//create a new taxonomy
register_taxonomy(
\'skills\',
\'projects\',
array(
\'labels\' => array(
//\'supports\' => array(
// \'title\', \'editor\', \'comments\', \'excerpt\', \'custom-fields\', \'thumbnail\'
//),
\'name\' => __( \'Skills\' ),
\'singular_name\' => __( \'skills\' ),
\'edit_item\' => __( \'Edit Skill\' ),
\'update_item\' => __(\'Update Skill\' ),
\'new_item_name\'=>__(\'New Skill Name\'),
\'all_items\'=>__(\'All Skill Name\'),
\'add_new_item\'=>__(\'Add New Skill\'),
\'search_items\'=>__(\'Seacrh Skill Name\'),
\'popular_items\' => __( \'Popular Skill\' ),
\'separate_items_with_comments\' => __( \'Separate Items With Comments\' ),
\'add_or_remove_items\'=>__(\'Add Or Remove Items\'),
\'choose_from_most_used\'=>__(\'Choose From Most Used\'),
),
\'public\' => true,
\'hierarchical\' => true,
\'rewrite\' => array(
\'slug\' => \'skills\',
\'with_front\' => true
),
)
);
}
最合适的回答,由SO网友:birgire 整理而成
看起来您想在短代码中注册自定义分类法,但这里有一个important notice 来自register_taxonomy
功能:
使用init
调用此函数的操作。在操作之外调用它可能会导致麻烦。看见#15568 有关详细信息。
下面是action run sequence 从我的主页:
muplugins_loaded <-- FIRST HOOK AVAILABLE
registered_taxonomy
registered_taxonomy
registered_taxonomy
registered_taxonomy
registered_taxonomy
registered_post_type
registered_post_type
registered_post_type
registered_post_type
registered_post_type
plugins_loaded
sanitize_comment_cookies
setup_theme
unload_textdomain
load_textdomain
after_setup_theme
load_textdomain
load_textdomain
auth_cookie_malformed
auth_cookie_valid
set_current_user
init <-- RECOMMENDED HOOK TO REGISTER TAXONOMIES
registered_post_type
registered_post_type
registered_post_type
registered_post_type
registered_post_type
registered_taxonomy
registered_taxonomy
registered_taxonomy
。。。持续
registered_taxonomy
registered_taxonomy
widgets_init
register_sidebar
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_loaded
parse_tax_query
parse_tax_query
posts_selection
parse_tax_query
parse_tax_query
。。。持续
posts_selection
template_redirect
admin_bar_init
add_admin_bar_menus
get_header
wp_head
wp_enqueue_scripts
wp_print_styles
wp_print_scripts
get_sidebar
dynamic_sidebar_before
dynamic_sidebar
<-- YOU ARE TRYING TO REGISTER TAXONOMIES HERE
dynamic_sidebar_after
。。。等等
因此,我们可以看到,尝试在小部件中使用短代码注册分类法,发生在主题代码的深处,与推荐的方法相去甚远init
钩
PS:我通常建议使用prefixed 短代码名称,而不是像taxonomy
或taxnomy
, 以避免可能的名称冲突。
解决方法
可能有一种方法可以解决这个问题,方法是在
init
钩住回调并在
widget_text
选项如果它存在,那么我们可以注册自定义分类法。我们也不想多次注册相同的分类法。我们还必须检查小部件是否处于活动状态。总的来说,我不知道这是不是个好主意。