web-dev-qa-db-fra.com

Ajouter une classe de corps quand post contient un shortcode spécifique

Fonction de shortcode simple:

function my_shortcode_function($atts,$content=null){
  // Do something
  return $content;
}
add_shortcode('my_shortcode','my_shortcode_function');

Je me demande comment ajouter plus de classe de corps supplémentaire lorsque l'utilisateur utilise ce shortcode dans son contenu.

Je ne peux pas faire quelque chose comme:

function my_shortcode_function($atts,$content=null){
  // Do something
  add_filter('body_class','my_body_class');
  return $content;
}
function my_body_class($classes) {
   $classes[] = 'foo';
   return $classes;
}
add_shortcode('my_shortcode','my_shortcode_function');

Une idée ?

1
l2aelba

Je fais quelque chose comme ça dans un de mes plugins:

function my_body_class( $c ) {

    global $post;

    if( isset($post->post_content) && has_shortcode( $post->post_content, 'your-shortcode' ) ) {
        $c[] = 'your-class';
    }
    return $c;
}
add_filter( 'body_class', 'my_body_class' );

Je ne suis pas sûr que c'était vraiment nécessaire, mais je ne peux probablement pas l'enlever maintenant TheDeadMedic a raison, vous devriez réfléchir à la nécessité de le faire.

5
helgatheviking