私はこのような変数があります:
$post_content = get_the_content();
ここで私は$ post_content変数から特定のショートコードを削除したいと思います。例えばこの[video height="300" width="300" mp4="localhost.com/video.mp4"]
だけを削除したいと思います。
どうすればこれができますか?
更新:
このようなコードを使用して、特定のショートコードを削除することができます。
<?php
echo do_shortcode(
str_replace(
'[video height="300" width="300" mp4="localhost.com/video.mp4"]',
'',
get_the_content()
)
);
?>
しかし、それはまたget_the_content()
のすべてのhtmlタグ/フォーマットを削除しています。それを避ける方法は?
あなたがまさにこのショートコードが欲しいならば:
[video height="300" width="300" mp4="localhost.com/video.mp4"]
何も出力しない場合は、wp_video_shortcode_override
フィルタまたはwp_video_shortcode
フィルタを使用してそれを実現できます。
そのような例が2つあります。
/**
* Let the [video] shortcode output "almost" nothing (just a single space) for specific attributes
*/
add_filter( 'wp_video_shortcode_override', function ( $output, $attr, $content, $instance )
{
// Match specific attributes and values
if(
isset( $atts['height'] )
&& 300 == $atts['height']
&& isset( $atts['width'] )
&& 400 == $atts['width']
&& isset( $atts['mp4'] )
&& 'localhost.com/video.mp4' == $atts['mp4']
)
$output = ' '; // Must not be empty to override the output
return $output;
}, 10, 4 );
/**
* Let the [video] shortcode output nothing for specific attributes
*/
add_filter( 'wp_video_shortcode', function( $output, $atts, $video, $post_id, $library )
{
// Match specific attributes and values
if(
isset( $atts['height'] )
&& 300 == $atts['height']
&& isset( $atts['width'] )
&& 400 == $atts['width']
&& isset( $atts['mp4'] )
&& 'localhost.com/video.mp4' == $atts['mp4']
)
$output = '';
return $output;
}, 10, 5 );
最初の例をお勧めします。早い段階でそれを傍受しており、ショートコードコールバック内ですべてのコードを実行する必要がないからです。
Phppreg_replaceコア関数を使用してコンテンツ内のショートコードを検索し、それを削除してコードを次のようにすることができます。
$post_content_without_shortcodes = preg_replace ( '/\[video(.*?)\]/s' , '' , get_the_content() );
そうではないですか
$post_content_without_shortcodes = strip_shortcodes(get_the_content());
それとも
$post_content_without_shortcodes = remove_all_shortcodes(get_the_content());