web-dev-qa-db-ja.com

Get_the_content()から特定のショートコードを削除

私はこのような変数があります:

$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タグ/フォーマットを削除しています。それを避ける方法は?

6
Faisal Khurshid

あなたがまさにこのショートコードが欲しいならば:

[video height="300" width="300" mp4="localhost.com/video.mp4"]

何も出力しない場合は、wp_video_shortcode_overrideフィルタまたはwp_video_shortcodeフィルタを使用してそれを実現できます。

そのような例が2つあります。

例1

/**
 * 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 );

例2

/**
 * 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 );

注意

最初の例をお勧めします。早い段階でそれを傍受しており、ショートコードコールバック内ですべてのコードを実行する必要がないからです。

4
birgire

Phppreg_replaceコア関数を使用してコンテンツ内のショートコードを検索し、それを削除してコードを次のようにすることができます。

$post_content_without_shortcodes = preg_replace ( '/\[video(.*?)\]/s' , '' , get_the_content() );
0
Softmixt

そうではないですか

$post_content_without_shortcodes = strip_shortcodes(get_the_content());

それとも

$post_content_without_shortcodes = remove_all_shortcodes(get_the_content());
0
RCNeil