Lors de la construction d'un plugin, je sais que vous pouvez vous connecter à une fonction pour exécuter du code tel que
add_action('admin_footer', array($this, 'custom_function'));
Et dans cette fonction, testez post_type comme ceci:
public function custom_function() {
$screen = get_current_screen();
if (self::CUSTOM_POST_TYPE == $screen->post_type) {
// Do something
}
}
}
Sur l'ensemble du plugin, je teste le post_type de l'écran dans de nombreuses fonctions différentes.
Dans l’esprit de D.R.Y., ma question est la suivante: existe-t-il un moyen d’ajouter de manière conditionnelle les actions d’un groupe en fonction du post_type actuel? Au lieu d'avoir beaucoup de fonctions qui font le même test pour le post_type comme:
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
}
}
}
est-il possible de tester le post_type et ensuite d'appeler les actions nécessaires pour ce type de post, par exemple:
$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'));
}
où le test conditionnel peut être supprimé de toutes les fonctions?
Existe-t-il un point particulier où un test et des appels comme celui-ci pourraient avoir lieu, de sorte que de nombreuses fonctions du plug-in n'ont pas nécessairement le même code?
Merci pour tout conseil.
En utilisant OOP PHP, ajoutez vos actions d’initialisation dans le __construct
et créez les méthodes appropriées pour les gérer. À partir de votre gestionnaire, vous pouvez initialiser n’importe quelle variable de classe (une fois) et la référencer ultérieurement sans avoir à effectuer de vérifications supplémentaires. Voici un exemple:
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'));
}
}
}
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
}