我正在编写一个插件,在何时触发插件代码的特定功能方面遇到了一些困难。
/*
// Plugin information goes here
*/
// ***** Area A
$GLOBALS[\'example_class\'] = new example_class;
class example_class {
// ***** Area B
public function admin_init() {
add_menu_page(
// ...
);
} // End of admin_init function
} // End of example class
add_action(\'init\', function() {
global $example_class;
// ***** Area C
if ( ?????? ) {
// Sanitize and set the view role
$view = ( isset( $_REQUEST[\'view\'] ) ) ? sanitize_key( $_REQUEST[\'ex\'] ) : \'get_all\';
// Manage submitted data
switch ( $view ) {
// ...
} // End of switch for view
// Sanitize and set the action role
$action = ( isset( $_REQUEST[\'action\'] ) ) ? sanitize_key( $_REQUEST[\'action\'] ) : NULL;
// Manage submitted data
switch ( $action ) {
//...
} // End of switch for action
} // End of if page is being shown
});
add_action( \'admin_menu\', function() {
global $example_class;
$example_class->admin_init();
});
add_shortcode( \'show_public_random\', function () {
global $example_class;
// ...
});
根据建议
in a previous post, 我将插件的控制器端分离为
init
事件但是,我不希望
init
每次加载页面时都要计算事件函数-我希望仅在加载包含短代码的页面时才计算代码。
我曾尝试加载一个布尔类变量,该变量初始化为false,但在add\\u shortcode函数中被更改为true,但到那时,为时已晚init
事件已激发,函数的内容未运行。
请帮助我-我应该在代码的C区使用哪个表达式?我应该针对什么进行测试以确保init
事件函数仅在使用快捷码时运行?
SO网友:Mario.Hydrant
我找到了一个答案,虽然很混乱。
/*
// Plugin information goes here
*/
$GLOBALS[\'example_class\'] = new example_class;
class example_class {
var $public_loaded = false,
$content = \'\';
public function admin_init() {
add_menu_page(
// ...
);
} // End of admin_init function
public function get_random( ) {
// ...
}
} // End of example class
add_action(\'init\', function() {
global $example_class;
// ***** Area A
// Check for arbitrary variable sent with every user interaction
if ( if ( isset( sanitize_key( $_REQUEST[\'tni\'] ) ) ) {
// ***** Area B
/* Set the class variable `public_loaded` to true after it\'s
* clear we\'re loading a public page which uses our plugin */
$example_class->public_loaded = true;
// Sanitize and set the action role
$action = ( isset( $_REQUEST[\'action\'] ) ) ? sanitize_key( $_REQUEST[\'action\'] ) : NULL;
// Manage submitted data
switch ( $action ) {
// ...
} // End of switch for action
// Sanitize and set the view role
$view = ( isset( $_REQUEST[\'view\'] ) ) ? sanitize_key( $_REQUEST[\'ex\'] ) : \'get_all\';
// Manage submitted data
switch ( $view ) {
// ... Generate content and store in $this->content
} // End of switch for view
} // End of if page is being shown
});
add_action( \'admin_menu\', function() {
global $example_class;
$example_class->admin_init();
});
add_shortcode( \'show_public_random\', function () {
global $example_class;
// ***** Area C
/* Check to see if page has loaded using the telltale sign
* If not, load a default view - a random post */
if ( $example_class->public_loaded === false ) {
$example_class->content = $example_class->get_random();
// ...
}
// Return the generated content
return $example_class->content;
});
在区域A中,我设置了一个限定语句,以查看用户是否提交了一个变量以及他们与我的插件的交互。如果插件是我的,则对代码进行评估,并且
action
和
view
评估模式。此外,该函数还将设置类变量
public_loaded
为真。
在区域C中,我设置了一个限定语句,以查看类变量是否已设置为true;如果不是,则为快捷代码设置默认视图。