我需要在一些页面上输出一些帖子,我创建了短代码:
function show_foo() {
// output stuff
}
add_shortcode( \'foo\', \'show_foo\' );
我在模板中这样使用它:
echo do_shortcode(\'[foo]\');
但现在我在想,如果我不应该使用有利于短代码的操作,比如:
function show_foo() {
// output stuff
}
add_action( \'foo\', \'show_foo\' );
在模板中使用它如下:
do_action(\'foo\');
这两种方法的利弊是什么?只有当您需要像这样向输出中添加属性时,才应该使用短代码,我的理解对吗?
echo do_shortcode([foo param_1="bar" param_2="foobar"]);
如果您需要让用户将函数的输出放入wysiwyg编辑器,因为他们无法访问模板?
SO网友:Jacob Peattie
两者都不正确。使用show_foo()
:
<?php echo show_foo(); ?>
使用快捷码的唯一原因是在编辑器中向页面或帖子插入动态内容(尽管现在“正确”的方法是使用
block, 尽管这更困难)。
短代码不应用于将内容输出到模板中,因为使用do_shortcode()
是完全不必要的开销。
do_action()
在将代码输出到模板中时也是多余的,因为您也可以直接运行回调函数。你使用的唯一理由do_action()
是:
如果您希望允许其他开发人员使用remove_action()
.您希望允许其他开发人员将自己的功能添加到模板的特定部分
SO网友:butlerblog
答案如下:
不要使用do_shortcode();
有关所有其他情况,请参阅#1如果您在可以使用PHP的领域工作,则无需使用do_shortcode()
因为您可以直接运行该函数。do_shortcode()
runs a pretty intensive regex 因为它必须遍历(并解析)站点上的所有短代码,所以在不必要的时候不要使用它。
(如果您要向主题中的某个区域添加短代码解析,那么情况就不同了,但在大多数情况下,不要这样做!)
是的,在某些情况下,shortcode的函数不是直接的,可能是类的一部分,所以here\'s a good solution when needing to access a shortcode that way.
您的问题关于do_action()
实际上,你可能不理解动作钩的概念。正在添加do_action( \'my_hook\' )
正在模板中添加一个动作挂钩(或在任何地方添加)。
在讨论这些术语时,通常会误用“动作挂钩”(和“过滤器挂钩”)。许多人会编写一个与动作挂钩的函数,并称之为“挂钩”,但“挂钩”是do_action()
(或apply_filters()
). 您编写的函数“与”该操作“挂钩”。(更准确地说,这是“回调”。)
所以在模板中do_action(\'foo\')
此时您已经创建了一个动作挂钩。这是一个定制点。如果你在一个只有你在一个实例中使用的主题中这样做,那么没有必要这样做。只有在编写供公共使用的框架或在多个站点上使用框架时,您才需要它,在这些站点上您可能会应用一些自定义元素。
根据您所描述的内容,正确的方法是show_foo()
直接地