对短码采取行动的利弊

时间:2019-11-22 作者:Cafourek

我需要在一些页面上输出一些帖子,我创建了短代码:

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编辑器,因为他们无法访问模板?

2 个回复
SO网友:Jacob Peattie

两者都不正确。使用show_foo():

<?php echo show_foo(); ?>
使用快捷码的唯一原因是在编辑器中向页面或帖子插入动态内容(尽管现在“正确”的方法是使用block, 尽管这更困难)。

短代码不应用于将内容输出到模板中,因为使用do_shortcode() 是完全不必要的开销。

do_action() 在将代码输出到模板中时也是多余的,因为您也可以直接运行回调函数。你使用的唯一理由do_action() 是:

如果您希望允许其他开发人员使用remove_action().

SO网友:butlerblog

答案如下:

不要使用do_shortcode();如果您在可以使用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() 直接地

相关推荐

如何从派生的进程中使用STRING_SHORTCODES()?

我有一个插件,它生成一个进程来执行打印功能。要打印的项目(在本例中为Woocommerce产品)通过URL传递(通过product_id). 在进行打印之前,必须从产品描述中删除所有注册的短代码。如果我打电话strip_shortcodes() 它什么都不做。我猜注册的短代码数组超出了范围?是否有人能提出一种有效的方法,使流程能够使用strip_shortcodes()?