快捷代码在主页页面模板(自定义首页)中不起作用

时间:2018-10-12 作者:Hrushikesh Patil

在我的主题的自定义主页中,MailChimp订阅表单的快捷码不起作用。但当我在博客页面和其他页面中使用相同的短代码时,它就起作用了

我把短码[mc4wp_form id="id"] 在主题页面中,它正在工作。

但当我把<?php echo do_shortcode ([mc4wp_form id="id"]); ?> 在我的自定义主页中,它就不起作用了。

谢谢

2 个回复
SO网友:butlerblog

通常的方法是使用do_shortcode(). 但这并不是一种有效的方法,因为它必须运行一个非常广泛的regex(正则表达式)来解析WP安装中的每一个短代码,才能得到您想要的代码。See this post for a more thorough explanation.

更好的方法是直接运行所需的回调函数。但这有时可能是一个挑战——要么你必须挖掘大量的代码才能找到它,要么它可能在对象类中,你怎么称呼它?

J.D. Grimes has provided a good utility function 用于以这种方式调用短代码,以便无需使用do\\u shortcode()即可访问直接回调函数。添加以下函数,可用于任何短代码实例:

/**
 * Call a shortcode function by tag name.
 *
 * @author J.D. Grimes
 * @link https://codesymphony.co/dont-do_shortcode/
 *
 * @param string $tag     The shortcode whose function to call.
 * @param array  $atts    The attributes to pass to the shortcode function. Optional.
 * @param array  $content The shortcode\'s content. Default is null (none).
 *
 * @return string|bool False on failure, the result of the shortcode on success.
 */
function do_shortcode_func( $tag, array $atts = array(), $content = null ) {
 
    global $shortcode_tags;
 
    if ( ! isset( $shortcode_tags[ $tag ] ) )
        return false;
 
    return call_user_func( $shortcode_tags[ $tag ], $atts, $content, $tag );
}
然后,您可以这样调用您的快捷码:

echo do_shortcode_func( \'mc4wp_form\', array( \'id\' => \'id\' ) );

SO网友:Jacob Peattie

在中的短代码周围缺少引号do_shortcode() 功能:

<?php echo do_shortcode( \'[mc4wp_form id="id"]\' ); ?>
do_shortcode() 是一个PHPfunction 这需要String 作为argument. 引号是使文本成为字符串所必需的。

结束

相关推荐

Namespaced shortcode?

我正在改造一个旧的WP站点,该站点有许多自定义的短代码,显然由于代码当前的组织方式,这些短代码在性能方面付出了代价。当然,我可以修复优化不好的代码,使用十几个短代码,并且一天就可以完成,但我想知道如何更好地组织它们。根据WordPress\'documentation, 建议将它们放在插件中并在上初始化init. 我们可以通过这样“命名”它们来减少这个钩子中的负载吗?[com.company shortcode attr=\"attr\" prop=\"prop\"] 有人尝试过这样的解决方案吗