web-dev-qa-db-ja.com

投稿に特定のショートコードが含まれている場合のボディクラスの追加

簡単なショートコード機能:

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

ユーザーがこのショートコードをコンテンツに使用するときに、さらにボディクラスを追加する方法.

こんなことはできません:

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');

何か案が ?

1
l2aelba

私は自分のプラグインの1つでこのようなことをしています。

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' );

本当に必要かどうかはわかりませんが、今は削除することもできないでしょう。 TheDeadMedicは正しいです、あなたが本当にこれをする必要があるかどうかについて考えるべきです。

5
helgatheviking