同一页面上的多个快捷码实例

时间:2015-02-01 作者:Fabio Marzocca

我有一个短代码:

function fm_requestebook ($atts) {
    $atts = shortcode_atts(array(
            \'cf7\'           =>  null,
            \'filename\'      =>  null,
            \'event\'         =>  null,
            \'testo\'         =>  "Scarica eBook"
             ), $atts);

    $contact_form = do_shortcode("[contact-form-7 id=".$atts[\'cf7\']."]");
    $hf = \'<input type="hidden" name="_FM_ebook" value="\' . $atts["filename"]. \'" /></form>\';
    $contact_form = str_replace("</form>", $hf, $contact_form);
    $return=\'<a onclick="ga(\\\'send\\\',\\\'event\\\', \\\'Download\\\', \\\'ebook\\\', \\\'\'.$atts["event"].\'\\\');" class="fancybox" href="#ebook" target="_blank" rel="nofollow"><span class="red-button">\'.$atts["testo"].\'</span></a><div class="fancybox-hidden" style="display: none;"><div id="ebook" class="hentry">\'.$contact_form.\'</div></div>\';

    return do_shortcode($return);

}
add_shortcode ("request-ebook","fm_requestebook");
问题是,如果我在同一页上放置多个短代码实例,所有后续代码都将具有相同的“\\u FM\\u ebook”值。。。。

1 个回复
SO网友:Privateer

我希望决赛

return do_shortcode($return); 
是因为它试图处理一个名为要返回的整个内容的短代码并返回一个值。我想这不是你想要的。

尝试将其更改为:

return $return;
如果这不能解决问题,那么我建议从稍微调整代码开始,以回应每个短代码的信息:

function fm_requestebook ($atts) {
    $atts = shortcode_atts(array(
        \'cf7\'           =>  null,
        \'filename\'      =>  null,
        \'event\'         =>  null,
        \'testo\'         =>  "Scarica eBook"
         ), $atts);

    echo "<p>Attributes Received:</p><pre>" . print_r($atts, true) . "</pre>";

    $contact_form = do_shortcode("[contact-form-7 id=".$atts[\'cf7\']."]");
    $hf = \'<input type="hidden" name="_FM_ebook" value="\' . $atts["filename"]. \'" /></form>\';
    $contact_form = str_replace("</form>", $hf, $contact_form);
    $return=\'<a onclick="ga(\\\'send\\\',\\\'event\\\', \\\'Download\\\', \\\'ebook\\\', \\\'\'.$atts["event"].\'\\\');" class="fancybox" href="#ebook" target="_blank" rel="nofollow"><span class="red-button">\'.$atts["testo"].\'</span></a><div class="fancybox-hidden" style="display: none;"><div id="ebook" class="hentry">\'.$contact_form.\'</div></div>\';

    echo "<p>About to return:</p><pre>" . htmlspecialchars( $return ) . "</pre>";
    $return = do_shortcode($return);
    echo "<p>After doing shortcode on return</p><pre>" . htmlspecialchars( $return ) . "</pre>";

    return $return;

}
这应该让您看到,对于每个短代码:

应用do\\u shortcode()之前的返回值是什么?应用最终do\\u shortcode()时的返回值是什么?当然,我建议删除最终do\\u shortcode,除非您确实有一个被命名为返回值整个内容的短代码。

结束

相关推荐

Remove echo from shortcode

我刚刚开始使用短代码,由于缺乏php知识,我无法想出如何在不使用php echo的情况下使用此短代码。有人能帮我修改代码吗?// SPONSORS Shorcode function sponsors_shortcode($atts) { extract(shortcode_atts(array( \"name\" => \"sponsors\", ), $atts)); $args = array( \"