是否可以将Add_Filter()函数包含在短码函数中

时间:2014-04-24 作者:user3570723

我正在尝试将内容传递到“google\\u dfp\\u ad\\u slot”过滤器。这可以在短码函数中完成吗?

/**
     * Shortcode function to dynamically add google dfp ads to inline content and widgets
     *
     * [fopconnect_ad is_page="true" page="about"]
     *   {JS}googletag.defineSlot(\'/6111408/FOPC_All_LeaderBoard_728x90\', [728, 90], \'div-gpt-ad-1398288352265-0\').addService(googletag.pubads());{/JS}
     *   {HTML}<div id=\'div-gpt-ad-1342652501811-0\' style=\'width:160px; height:600px;\'><script type=\'text/javascript\'>googletag.cmd.push(function() { googletag.display(\'div-gpt-ad-1342652501811-0\'); });</script></div>{/HTML}
     * [/fopconnect_ad]
     *
     * @param  array $atts    shortcode attributes
     * @param  string $content
     * @return sting
     */



    add_shortcode( \'fopconnect_ad\', \'fopconnect_ad_func\' );
    function fopconnect_ad_func( $atts, $content ) {
        extract( shortcode_atts( array(
            \'is_page\' => false,
            \'page\' => \'\' // can be title, slug, or id
        ), $atts ) );

        preg_match("#\\\\{JS\\\\}(.*?)\\\\{/JS\\\\}#s", $content, $matches);
        $js = ( !empty( $matches[1] ) ? $matches[1] : \'\' );

        preg_match("#\\\\{HTML\\\\}(.*?)\\\\{/HTML\\\\}#s", $content, $matches);
        $content = ( !empty( $matches[1] ) ? $matches[1] : \'\' );

        if ( $is_page && is_page( explode(\', \', $page) ) ) {
            add_filter( \'google_dfp_ad_slot\', function( $js ) { return $js; } );
        }

        if ( $is_page && is_page( explode(\', \', $page) ) ) {
            return $content;
        }

    }

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

这应该是可能的,但你必须意识到时间问题。您的短代码必须在挂接到的任何挂钩之前执行。

也就是说,你不能wp_enqueue_scriptswp_head 但您应该能够钩住后面的钩子,如wp_footer. 我怀疑时间是个问题。

结束

相关推荐

Gist shortcode is not working

我刚安装了一个全新的Wordpress用于测试,因为我打算刷新我当前的网站。我的一个要求是能够嵌入Gist中的代码。在Wordpress文档之后,较新版本附带了Gist的特定短代码:Gist Shortcode问题是它根本不起作用。我试着简单地将url粘贴在一行上,或者将其包裹在[要点]标签上,但没有任何效果。url只是在帖子中显示为原始文本。我知道有些插件提供了相同的功能,但我真的希望使用Wordpress的内置功能。我的网站已自动托管并安装在Azure网站上,运行PHP 5.4和Wordpress 3