在短码后插入自定义HTML

时间:2016-06-02 作者:Howdy_McGee

情况是,我需要在幻灯片下添加一个HTML横幅,这是主页内容中的一个短代码。我个人讨厌添加一些div 标记到TinyMCE编辑器,因此我正在尝试筛选the_content 并在特定的短代码后添加我的HTML。下面是一个解决方案,但我不确定是否有更好的方法。

在特定短代码之后添加内容的最佳方式是什么?

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

我想知道您是否可以覆盖[rev_slider] 使用这种包装:

add_shortcode( \'rev_slider\', function( $atts = array(), $content = \'\' )
{
    $html = \'\';

    // Your custom banner HTML
    $banner = \'<div id="bannerHTML"><!-- banner HTML goes here --></div>\';

    // Append your banner HTML to the revslider\'s output
    if( function_exists( \'rev_slider_shortcode\' ) )
        $html = rev_slider_shortcode( $atts, $content ) . $banner;

    return $html;

} );
我们假设原始短代码的回调是rev_slider_shortcode(). 我们必须在原来的基础上运行。

按照@Sumit的建议更新,我们可以尝试从$shortcode_tags 大堆

下面是一个示例:

add_action( \'after_setup_theme\', function() use ( &$shortcode_tags )
{
    // Shortcode to override. Edit to your needs
    $shortcode = \'rev_slider\';

    // Nothing to do if it\'s not registered as shortcode
    if( ! shortcode_exists( $shortcode ) )
        return; 

    // Get the shortcode\'s callback
    $callback = $shortcode_tags[$shortcode];

    // Override the shortcode
    add_shortcode( $shortcode, function( $atts = array(), $content = \'\' ) use ( $callback )
    {
        // Your custom banner HTML
        $banner = \'<div id="bannerHTML">123<!-- banner HTML goes here --></div>\';

        // Append your banner HTML to the revslider\'s output
        return 
            is_callable( $callback ) 
            ? call_user_func( $callback, $atts, $content, $callback ) . $banner 
            : \'\';
    } );

}, PHP_INT_MAX );
在这里,我们很晚才进入after_setup_theme 操作和使用call_user_func() 运行前一个短代码的回调,类似于do_shortcode_tag().

SO网友:Howdy_McGee

这是我经过一点改进后提出的解决方案。只有当内容中存在快捷码时,才应运行下面的。它循环遍历所有短代码以找到我们需要的特定短代码,并将其替换为短代码加上新的HTML:

function insert_after_shortcode( $content ) {
    if( ! has_shortcode( $content, \'shortcode_name\' ) ) {
        return $content;
    }

    ob_start();
  ?>

    <div id="bannerHTML"><!-- banner HTML goes here --></div>

  <?php

    $additional_html = ob_get_clean();
    preg_match_all( \'/\'. get_shortcode_regex() .\'/s\', $content, $matches, PREG_SET_ORDER );

    if( ! empty( $matches ) ) {

        foreach ( $matches as $shortcode ) {

            if ( \'shortcode_name\' === $shortcode[2] ) {
                $new_content = $shortcode[0] . $additional_html;
                $content     = str_replace( $shortcode[0], $new_content, $content );
            }
        }
    }

    return $content;
}
add_filter( \'the_content\', \'insert_after_shortcode\' );

相关推荐

Execute shortcodes in PHP

我在帖子编辑器中添加了一个地理位置快捷码,可以根据用户的位置显示不同的信息,将其放在帖子页面的内容中,效果非常好。如何在主题的PHP文件中执行此短代码[地理位置][地理位置]?我正在使用免费修改Wordpress主题,我想添加一个新的<span>[geolocation][/geolocation]Information text content</span> 但在主题的内部。php文件,我如何才能做到这一点?如果我直接加上<span>[geolocation][/ge