Php模板短码可以吗?

时间:2016-05-26 作者:Henry

我能让每个人都同意在模板中嵌入短代码是“正确的”做法吗?我已经对它们进行了测试,它们工作得很好,但我只是想了解每个人的想法。谢谢

下面是一个示例:

<?php echo do_shortcode(\'[course_complete]\'); ?>

3 个回复
SO网友:Tom J Nowell

可以吗

是!

它是最优的吗

什么会更好

短代码映射到PHP函数,那么为什么不去掉中间人,直接转到原始函数呢?

还有其他缺点吗

是!

这个短代码必须来自某个地方,现在你有了一个依赖项,也许有这个短代码的插件被停用了,谁知道呢

有什么好处吗

是!以编程方式构建库短代码,然后将其传递到do_shortcode 而不是从头开始创建一个。

即使您绕过了短代码,直接转到原始函数,您仍然存在上述相同的问题。如果短代码不存在,它将正常降级为空字符串。您也可以在帖子内容中使用快捷码

那么,最好只在小部件+页面+帖子中使用快照代码

是吗Ok? 对但这是best? 可能不会

短代码太棒了!但请记住它们的目的,如果您需要将内容放入模板中,则不需要使用短代码,但如果需要,该选项始终存在。这个do_shortcode 功能只是一种工具,它们是用来在内容中嵌入东西的,不要把它作为网站或框架的基础。我已经建立了很多网站,我不必这样做

SO网友:cybmeta

短代码是PHP回调的占位符。作为占位符,它用于不能直接使用PHP的地方。

此外,do_shortcode() 将在传递的字符串中执行正则表达式,查找所有已注册的短代码,如果您只想执行一个短代码,而不是查找字符串中的所有短代码,从性能角度来看,这是不合适的。

因此,几乎没有理由使用do_shortcode( \'[my_shortcode]\' ) 在模板文件中;使用回调而不是占位符更合适。

但是,可以使用do_shortcode() 解析字符串或过滤可能包含要执行的短代码的内容,但模板文件可能不是解析字符串或过滤内容的正确位置。例如,您可能希望过滤文本小部件内容并允许其中包含短代码:

add_filter( \'widget_text\', \'do_shortcode\' );
do_shortcode() 当您需要短代码的功能时,它也很有用,无论您得到的是确切的输出或使用的是什么回调,您都需要该功能。

例如,插件/主题可以重新定义短代码,例如库短代码:

remove_shortcode( \'gallery\', \'gallery_shortcode\' );
add_shortcode( \'gallery\', \'my_gallery_shortcode\' );
在这种情况下,如果需要库功能,而不是回调的特定输出,请使用do_shortcode( \'[gallery]\' ) 在一个主题内是合理的。但是,任何人都不应该重新声明库的短代码post_gallery filter 应用于修改库短代码输出。因此,使用do_shortcode(\'[gallery]\') 将是一个非常边缘的用例。

相同的参数适用于任何短代码和do_shortcode() 通常是一个非常边缘的情况。

SO网友:Mark Kaplun

这样做的短代码与eval. 如果您打算给用户一个选项,但不是一个可接受的编码实践,那么这是可以的。

当以这种方式激活功能时,您会失去三件事

代码可读性。你到底打算在那里做什么?如果不看一下短代码的实现,我就猜不到它,没有工具可以帮助我找到它。

可预测性。在新版本中更改短代码属性时会发生什么情况?当短代码本身只是在做一些完全超出您预期的事情时,会发生什么?当您直接调用某个函数时,很可能会出现错误,提示您注意界面中不兼容的更改,但使用一个在用户抱怨之前您不知道的快捷码。

可测试性。从第二点开始,但值得强调。当您不知道应该发生什么时,您将如何测试您的代码?

如果你特别追求灵活性,在我看来,一个更好的方法是创建自己的动作挂钩,并让人们挂钩。您可以提供任何您认为有用的钩子实现,如果人们愿意,他们可以更改它。这里的要点是,钩子作为“随机的东西可以放在这里”的手段的意图比使用短代码更明确。

相关推荐

SHORTCODE_ATTS()中的$ATTS参数是什么?

这个WordPress developers reference page for shortcode_atts() 国家:$atts(array)(必选)用户在shortcode标记中定义的属性。但我不理解这个定义。例如,在WP Frontend Profile 插件:$atts = shortcode_atts( [ \'role\' => \'\', ], $atts ); 据我所知,shortcode\