Do not parse shortcode in CPT

时间:2018-05-10 作者:Shamim Hasan

我有一个CPT,我不想在它的内容中解析shortcode(使用\\u content()函数)。我可以使用remove\\u filter删除短代码的默认过滤器。但我如何确定我只是为了我想要的CPT而删除过滤器?

我有一个在页面中使用的快捷码[我的自定义快捷码]。此短代码使用WP\\U查询和输出CPT帖子。我不想在这篇CPT文章中分析短代码。

我是否应该在短代码解析挂钩之前用虚拟内容更改短代码,并在之后替换回来?或者我应该在我的CPT输出之前删除短代码的默认过滤器,然后在我的CPT输出完成后再次添加短代码的默认过滤器吗?

还是有更好的选择?

编辑:我的短代码如下所示

add_shortcode( \'my-custom-shortcode\', \'my_custom_function\' );
function my_custom_function(){
    $args = array(
        \'post_type\' => \'my-cpt\',
        \'post_status\' => \'publish\',
        \'posts_per_page\' => 10,
        \'order\'=> \'ASC\'
     );
    $posts = new WP_Query( $args );
    ob_start();

    if( $posts->have_posts() ) {
        while ( $posts->have_posts() ) {
        $posts->the_post();
            the_content(); //Here i do not want to parse (any) shortcode
        }
        wp_reset_postdata();
    }
    return ob_get_clean();
}

2 个回复
最合适的回答,由SO网友:Shamim Hasan 整理而成

我在回答我自己的问题,以供其他想要这种行为的人参考

If you want to show shortcode as plain text without parsing follow this procedure

add_shortcode( \'my-custom-shortcode\', \'my_custom_function\' );
function my_custom_function(){
    global $shortcode_tags;
    $tags = $shortcode_tags;
    $shortcode_tags = array(); //empty global shortcode tags

    $args = array(
        \'post_type\' => \'my-cpt\',
        \'post_status\' => \'publish\',
        \'posts_per_page\' => 10,
        \'order\'=> \'ASC\'
     );
    $posts = new WP_Query( $args );
    ob_start();

    if( $posts->have_posts() ) {
        while ( $posts->have_posts() ) {
        $posts->the_post();
            the_content(); //Here i do not want to parse (any) shortcode
        }
        wp_reset_postdata();
    }
    $shortcode_tags = $tags //reset tags to global variable
    return ob_get_clean();
}

If you want to strip shortcode without parsing follow this procedure

add_filter( \'the_content\', \'my_remove_shortcode\' );
function my_remove_shortcode( $content ) {
    if( get_post_type() == \'my-cpt\' ) {
        $content = strip_shortcodes( $content ); // strip all shortcodes
    }

    return $content;
}

SO网友:mukto90

我想你需要这样的东西-

add_filter( \'the_content\', \'wpse_303180_remove_shortcode\' );
function wpse_303180_remove_shortcode( $content ) {
    global $post;
    if( get_post_type( $post ) == \'my-cpt\' ) {
        remove_shortcode( \'my-custom-shortcode\' );
        // remove_all_shortcodes(); // to remove all shortcodes
    }

    return $content;
}

结束

相关推荐

Adding shortcode

嗨,我有一个非常简单的问题,我安装了一个插件,它需要将一些代码添加到Gallery短代码中。要将wordpress gallery替换为Zoom OpenSeadragon gallery,您需要将OpenSeadragon=“true”添加到gallery快捷码。您还可以使用媒体选项将所有库替换为Zoom OpenSeadragon库。要显示可缩放的图像,例如深度缩放图像,您需要将它们的路径添加到shortcode的zoomimages属性中,例如[gallery openseadragon=\"tru