如何包括一个管理文件和2个页面,而不是加载到网站的其他部分?

时间:2012-02-13 作者:Jenny

我需要两次包含一个文件。一次在admin中,另一次在其组件中。

if( is_admin() || is_the_component() ) require... 
但是,类中有一个很大的函数,用于注册仅在插件激活时需要的内容。更重要的是,我想让这个班级成为一个超级全球化的班级。

$GLOBALS[\'user_data\'] = new My_Class();
这让我觉得它有点太重了,无法在整个网站上承载大的注册功能。

我是否应该重新安排类以排除该函数?

1 个回复
最合适的回答,由SO网友:kaiser 整理而成

包括正确的方式

包括文件时,需要记住两件不同的事情:

1。使用核心函数获取路径

我解释了大多数可用函数with this answer. 考虑查看/wp-includes/link-template.php 在core中归档,查看core还为您提供了什么。

在加载文件时,Php非常便宜:只要不执行函数,这并不重要。因此:加载文件不会有问题。加载类本身(可能运行__construct(); 车窗负荷)可能会变得更大。因此,唯一真正的问题是:如何避免在特定页面上执行整个流程。

2.1。使用其中一个add_submenu/menu/*_page() 函数,然后您可以@return 值并使用它确定当前页面的挂钩。

// Example:
$hook_suffix = add_options_page( 
    \'My Plugin Options\', 
    \'My Plugin\', 
    \'required_capability\', 
    \'my-unique-identifier\', 
    \'my_plugin_options\' 
);
// Add hook for action executed when plugin\'s options page is loaded
add_action( "load-{$hook_suffix}" , \'my_load_function\' );

2.2。或者检查正确的全局变量,您可以在管理屏幕上看到大量全局变量。大多数已设置为initadmin_init 挂钩。

  • $menu
  • $submenu
  • $pagenow
  • $typenow
  • $self
  • $parent_file
  • $submenu_file
您还可以检查global $current_screen. 这提供了一个对象,您可以在其中对照其各个部分进行检查。

Globals vs.public API

$_GLOBALS 没有保存到DB中的内容。因此,它只在以前注册的情况下可用。关键是不能排除类,但仍然可以使用全局类。无论如何,你都必须重新思考这个概念:你可以为全球化者做很多事情,比如unset, 等等。这大部分是你不想发生的事情。如果您正在为您的用户(和您自己)提供一个公共API,那么这取决于您,这些函数能做什么,不能做什么。

在我看来,添加另一个保存公共API的文件更容易。在那里,您可以简单地包含插件核心文件,然后只调用类中您希望访问的那些函数。另一个好处是可以添加预定义的参数。这些可以让您在模板中更快地工作,而且还可以wp_parse_args( $defaults, $input_args ); 使用默认的类变量。

激活、停用、卸载和hellip

你好;我已经说过了吗explain in detail with this answer.

结束

相关推荐

函数deactive_plugins不存在

我正在function deactivate_plugins does not exist 调用此函数时出错function deactivateSelf(){ deactivate_plugins(RSD_PLUGIN, true); //gives error: function deactivate_plugins does not exist header(\"Location: plugins.php?deactivate=true\"); //redirect