是否根据POST_TYPE有条件地调用ADD_ACTION?

时间:2013-10-09 作者:edeneye

在构建插件时,我知道您可以挂接到一个函数来运行以下代码

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\'));
}
在哪里可以从所有函数中删除条件测试?

是否有一个特定的钩子,在这个钩子中可以进行这样的测试和调用,以至于插件的许多函数都不必具有相同的代码?

谢谢你的建议。

2 个回复
最合适的回答,由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\'));
        }
    }
}

SO网友:Prince Singh
add_Action(\'init\',\'call_it_to_hook\');
function call_it_to_hook() {
    global $post;
    if($post->post_type == \'custom_post_type\') {
        add_Action(\'hook name\', \'callback_function\');
    }
}

callback_function() {
echo "hey";
// thats my place , can do whatever i want here
}
结束

相关推荐

Row actions not showing? Why?

我建造了一个WP_List_Table 显示在我构建的自定义主题页面上。尽管我查看了Internet上关于WP\\U List\\U表格的所有可能信息,但在显示行操作时遇到了一些问题。任何帮助都会很好!class Testimonials_List_Table extends WP_List_Table { function __construct() { parent::__construct( array( \'singular\'=> \'te