我正在编写一个插件,我在何时触发插件代码的特定功能时遇到了一些困难。
/*
// 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;
// ...
});
根据stackexchange上的建议in a previous post,我将插件的控制器端分隔为init
事件调用的函数。但是,我不希望在每个页面加载时评估init
事件函数中包含的代码 - 我希望仅在加载包含短代码的页面时评估我的代码。
我已经尝试加载一个初始化为false但在add_shortcode函数中更改为true的布尔类变量,但到那时,为时已晚 - init
事件已触发,函数的内容为不跑。
请帮帮我 - 我应该在我的代码的C区使用哪个表达式?我应该测试什么以确保仅在使用短代码时才运行init
事件函数?
答案 0 :(得分:0)
我找到了答案,虽然很乱。
/*
// 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
设置为true。
在区域C中,我设置了一个限定语句,以查看类变量是否已设置为true;如果没有,则为短代码设置默认视图。