Do_action不一定要伴随着一个函数吗?

时间:2018-03-07 作者:user7432810

假设我们有这样一个do\\u操作:

do_action(\'some_action\');
这难道不意味着some_action() 在wordpress中的某个位置执行以下操作,例如:

function some_action(){
   /* blah blah blah*/
}
我的问题来自do_action() 在woocommerce的店面主题中,标题中有一行。php如下所示:

do_action( \'storefront_header\' );
但我还没找到storefront_header() 所以我开始想,也许不是所有的do\\u操作都有自己的功能。有可能吗?

3 个回复
最合适的回答,由SO网友:Alex Sancho 整理而成

中使用的参数do_action 不是一个函数只是一个表示所调用操作的标记,使用操作的正确方法是将函数附加到add_action.

您可以从https://developer.wordpress.org/reference/functions/do_action/

SO网友:Pat J

这个some_action 在里面do_action( \'some_action\' ); 是一个动作挂钩,允许您在WordPress生命周期中的特定时间点执行动作。如果一个动作挂钩碰巧与一个函数共享一个名称,这是一种巧合(或者通常是一种方便)。

从词汇表中:

…操作是在整个WordPress核心的特定点执行的PHP函数。

开发人员可以使用动作API创建自定义动作,通过指定任何现有挂钩来添加或删除现有动作中的代码。此过程称为;挂钩;。

-Glossary: Action

动作挂钩(及其近亲,过滤挂钩)是WordPress丰富的Plugin API.

SO网友:Silicon Dales

你可能想看看storefront/inc/storefront-template-hooks.php 看见https://github.com/woocommerce/storefront/blob/1790927f8cab022bc96847fb0efc4f2f2ff6b2aa/inc/storefront-template-hooks.php

您可以在此处看到操作以及相关功能(和顺序):

add_action( \'storefront_header\', \'storefront_skip_links\',                       0 );
add_action( \'storefront_header\', \'storefront_site_branding\',                    20 );
add_action( \'storefront_header\', \'storefront_secondary_navigation\',             30 );
add_action( \'storefront_header\', \'storefront_primary_navigation_wrapper\',       42 );
add_action( \'storefront_header\', \'storefront_primary_navigation\',               50 );
add_action( \'storefront_header\', \'storefront_primary_navigation_wrapper_close\', 68 );
例如,选择第一个后,此处的函数为storefront_skip_links, 哪个在storefront/inc/storefront-template-functions.php (撰写本文时第279行!)看起来是这样的:

if ( ! function_exists( \'storefront_skip_links\' ) ) {
    /**
     * Skip links
     *
     * @since  1.4.1
     * @return void
     */
    function storefront_skip_links() {
        ?>
        <a class="skip-link screen-reader-text" href="#site-navigation"><?php esc_attr_e( \'Skip to navigation\', \'storefront\' ); ?></a>
        <a class="skip-link screen-reader-text" href="#content"><?php esc_attr_e( \'Skip to content\', \'storefront\' ); ?></a>
        <?php
    }
}
希望这能帮助您理解这在实践中是如何工作的!

结束