正如我之前提到的,这是在分类法注册之前发生的术语获取的情况。
init操作发生在包含主题的函数文件之后,因此如果您直接在函数文件中查找术语,那么您是在它们实际注册之前进行的。
下面是wp-settings.php
它包括主题功能,并且init
行动
// Load the functions for the active theme, for both parent and child theme if applicable.
if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( STYLESHEETPATH . \'/functions.php\' ) )
include( STYLESHEETPATH . \'/functions.php\' );
if ( file_exists( TEMPLATEPATH . \'/functions.php\' ) )
include( TEMPLATEPATH . \'/functions.php\' );
do_action( \'after_setup_theme\' );
// Load any template functions the theme supports.
require_if_theme_supports( \'post-thumbnails\', ABSPATH . WPINC . \'/post-thumbnail-template.php\' );
register_shutdown_function( \'shutdown_action_hook\' );
// Set up current user.
$wp->init();
/**
* Most of WP is loaded at this stage, and the user is authenticated. WP continues
* to load on the init hook that follows (e.g. widgets), and many plugins instantiate
* themselves on it for all sorts of reasons (e.g. they need a user, a taxonomy, etc.).
*
* If you wish to plug an action once WP is loaded, use the wp_loaded hook below.
*/
do_action( \'init\' );
正如您所看到的
init
操作在包含主题函数文件之后才会启动,因此任何术语检索都必须在init之后进行。我不能再进一步建议您了,因为您只向我展示了部分代码,所以我不太清楚您试图在其中使用术语function的上下文,但它肯定不能直接在函数文件中调用(在连接到特定操作/过滤器的回调之外,因为代码很快就会运行)。
希望以上内容足以说明您的问题:)
Additional note:
这个函数在全局语句中缺少一个var(如果启用了debug,您会看到PHP通知)。
function news_updated_messages( $messages ) {
global $post;
应该是。。
function news_updated_messages( $messages ) {
global $post, $post_ID;
。。因为该函数内的代码引用了该var,但该变量在函数内没有作用域,所以我上面建议的更改将修复该问题。
后续#1
创建插件或主题页面时,首先必须设置/注册该页面,通常是这样做的。。
add_action(\'admin_menu\', \'my_theme_menu\');
function my_theme_menu() {
add_theme_page( \'Theme Settings\', \'Theme Settings\', \'manage_options\', \'my-unique-identifier\', \'my_theme_settings\' );
}
function my_theme_settings() {
// Code to display/handle theme options would be here
// You get_terms() call should work inside this function just fine
}
如果主题页面的创建方式不同,那么我真的无能为力,因为他们倾向于使用与常规WordPress主题完全不同的框架。