在构建插件时,我知道您可以挂接到一个函数来运行以下代码
add_action(\'admin_footer\', array($this, \'custom_function\'));
在该函数中,测试post\\u类型,如下所示:
public function custom_function() {
$screen = get_current_screen();
if (self::CUSTOM_POST_TYPE == $screen->post_type) {
// Do something
}
}
}
在整个插件中,我正在测试许多不同功能中的post\\u类型的屏幕。
本着D.R.Y.的精神,我的问题是,是否有一种方法可以根据当前的post\\u类型在组中有条件地添加操作?而不是使用许多函数对post\\u类型进行相同的测试,例如:
public function custom_function_1() {
$screen = get_current_screen();
if (self::CUSTOM_POST_TYPE == $screen->post_type) {
// Do something
}
}
}
public function custom_function_2() {
$screen = get_current_screen();
if (self::CUSTOM_POST_TYPE == $screen->post_type) {
// Do something
}
}
}
是否可以测试post\\u类型,然后调用该post类型所需的操作,例如:
$screen = get_current_screen();
if (self::CUSTOM_POST_TYPE == $screen->post_type) {
add_action(\'admin_footer\', array($this, \'custom_footer_function\'));
add_action(\'save_post\', array($this, \'custom_save_function\'));
add_action(\'delete_post\', array($this, \'custom_delete_function\'));
add_filter(\'enter_title_here\', array($this, \'custom_title_placeholder\'));
}
在哪里可以从所有函数中删除条件测试?
是否有一个特定的钩子,在这个钩子中可以进行这样的测试和调用,以至于插件的许多函数都不必具有相同的代码?
谢谢你的建议。
最合适的回答,由SO网友:Twifty 整理而成
使用OOP PHP,在__construct
并创建适当的处理方法。从处理程序中,您可以初始化任何想要的类变量(一次),并在以后引用它,而无需进行任何进一步的检查。以下是一个示例:
class my_plugin {
private $post_type;
private $isCustom = false;
public function __construct() {
add_action( \'admin_init\', array( $this, \'admin_init\' ) );
}
public function admin_init() {
// This method is called only once, so do any initialization here.
$this->post_type = get_current_screen()->post_type;
$this->isCustom = self::CUSTOM_POST_TYPE == $this->post_type;
if ( $this->isCustom ) {
add_action(\'admin_footer\', array($this, \'custom_footer_function\'));
add_action(\'save_post\', array($this, \'custom_save_function\'));
add_action(\'delete_post\', array($this, \'custom_delete_function\'));
add_filter(\'enter_title_here\', array($this, \'custom_title_placeholder\'));
}
}
}