这个答案应该归功于@Wyck,他正确地确定了问题的根源。非常感谢你。出现问题的原因是:
主线代码中的导入语句与函数中的导入语句之间存在差异。在WP或任何插件中,如果变量未显式设置为全局,则它们将在本地作用于要导入的函数。
遗憾的是,没有import指令来显式地将变量定向到特定的名称空间,但如果没有这个指令,您可以简单地将所有全局变量声明为函数中的“全局”。使用与我最初的问题陈述中相同的演示文件,现在可以工作了:
<?php
function do_that_wordpress_thing() {
global $domain, $path, $base, $admin_page_hooks, $ajax_results, $all_links, $allowedposttags, $allowedtags, $authordata, $bgcolor, $cache_categories, $cache_lastcommentmodified, $cache_lastpostdate, $cache_lastpostmodified, $cache_userdata, $category_cache, $class, $comment, $comment_cache, $comment_count_cache, $commentdata, $current_user, $day, $debug, $descriptions, $error, $feeds, $id, $is_apache, $is_IIS, $is_macIE, $is_winIE, $l10n, $locale, $link, $m, $map, $max_num_pages, $menu, $mode, $month, $month_abbrev, $monthnum, $more, $multipage, $names, $newday, $numpages, $page, $page_cache, $paged, $pagenow, $pages, $parent_file, $preview, $previousday, $previousweekday, $plugin_page, $post, $post_cache, $post_default_category, $post_default_title, $post_meta_cache, $postc, $postdata, $posts, $posts_per_page, $previousday, $request, $result, $richedit, $single, $submenu, $table_prefix, $targets, $timedifference, $timestart, $timeend, $updated_timestamp, $urls, $user_ID, $user_email, $user_identity, $user_level, $user_login, $user_pass_md5, $user_url, $weekday, $weekday_abbrev, $weekday_initial, $withcomments, $wp, $wp_broken_themes, $wp_db_version, $wp_did_header, $wp_did_template_redirect, $wp_file_description, $wp_filter, $wp_importers, $wp_plugins, $wp_taxonomies, $wp_the_query, $wp_themes, $wp_object_cache, $wp_query, $wp_queries, $wp_rewrite, $wp_roles, $wp_similiesreplace, $wp_smiliessearch, $wp_version, $wpcommentspopupfile, $wpcommentsjavascript, $wpdb;
global $load_sections; // for pagelines theme
include "AddWordpress.php";
}
do_that_wordpress_thing();
$terms = get_terms("actions"); // I have a custom taxonomy named "actions"
echo json_encode($terms);
同样值得注意的是,如果在插件中使用自动加载器;您应该使它们与命名空间兼容。例如,而不是:
spl_autoload_register ( \'autoloader_function_name\' );
使用此选项:
spl_autoload_register ( __NAMESPACE__ . \'\\\\autoloader_function_name\' );