web-dev-qa-db-fra.com

remove_action conditionnellement pour le type de publication personnalisé

Par défaut, mon thème affiche une zone d’auteur sous mes messages. J'utilise un type de message personnalisé et souhaite supprimer cette zone d'auteur uniquement sur ce type de message. Voici comment le thème appelle la boîte d'auteur:

add_action( 'wp_head', 'woo_author', 10 );

if ( ! function_exists( 'woo_author' ) ) {
function woo_author () {
    // Author box single post page
    if ( is_single() && get_option( 'woo_disable_post_author' ) != 'true' ) { add_action( 'woo_post_inside_after', 'woo_author_box', 10 ); }
    // Author box author page
    if ( is_author() ) { add_action( 'woo_loop_before', 'woo_author_box', 10 ); }
} // End woo_author()
}

Voici la fonction que j'ai essayé de supprimer la zone auteur de l'article wpseo_locations, mais elle ne fonctionne pas:

add_action('init', 'kiwi_remove_post_author_box'); 

function kiwi_remove_post_author_box () {
    if (is_singular('wpseo_locations')  ) {
        remove_action( 'woo_post_inside_after', 'woo_author_box', 9 );
    }  
}

J'ai aussi essayé:

add_action('init', 'kiwi_remove_post_author_box'); 

function kiwi_remove_post_author_box () {
    if ( 'wpseo_locations' == get_post_type() ) {
        remove_action( 'woo_post_inside_after', 'woo_author_box', 9 );
    }  
}

Je n'arrive pas à faire sortir cette boîte. Je sais qu'il existe une case à cocher dans le panneau d'options de thème qui le fera disparaître globalement, mais je souhaite le supprimer uniquement pour ce type d'article. Toute aide serait grandement appréciée.

1
itrogers

La variable de requête est uniquement accessible après l'appel de wp_query. Dans votre appel, la fonction get_post_type() renvoie en réalité une valeur vide. Cela devrait fonctionner si vous changez le hook en quelque chose qui se déclenche après l'appel de wp_query.
Donc, vous devriez utiliser -

add_action('wp', 'kiwi_remove_post_author_box');

OR

add_action('template_redirect', 'kiwi_remove_post_author_box');

En outre, les crochets peuvent être supprimés avec la même valeur de priorité que celle sur laquelle ils ont été ajoutés.
Donc, le code final serait -

add_action('template_redirect', 'kiwi_remove_post_author_box');
function kiwi_remove_post_author_box()
{
    if( is_singular('wpseo_locations') )
        remove_action( 'woo_post_inside_after', 'woo_author_box', 10 );
}
2
Shazzad

Grâce à @ Shazzad, j'ai pu trouver le code final qui a fonctionné.

add_action('template_redirect', 'kiwi_remove_post_author_box'); 

function kiwi_remove_post_author_box () {
    if ( 'wpseo_locations' == get_post_type() ) {
        remove_action( 'wp_head', 'woo_author', 10 );
    }  
}

Notez comment remove_action a changé dans la fonction. Dès que j'ai fait cela, cela a fonctionné. Cela signifie-t-il que vous ne pouvez pas utiliser les hooks s'ils se trouvent dans une autre fonction et sont appelés de manière conditionnelle?

0
itrogers