How to use a custom hook

时间:2021-04-16 作者:Bert

我尝试在Wordpress网站上创建并运行一个自定义挂钩。

在标题中。我使用的php文件

do_action(\'somestuff\');
在我家。php和页面。php I执行add\\u操作,如

add_action(\'somestuff\', \'testfunc\');

function testfunc(){
    echo \'hello\';
}
但是文本没有显示?我做错了什么?

2 个回复
SO网友:Tom J Nowell

问题是执行的顺序。The order things run matters.

要使代码正常工作,需要add_action 在过去几微秒内实现时间旅行,以便在运行之前添加挂钩,或者需要do_action 实现预感知,以便它了解add_action 未来尚未发生的呼叫。

通过将add_action 请来home.php 或在header.php 运行时,您告诉WordPress在已启动的钩子启动时执行代码。

这相当于抵达机场并试图登上已经起飞的航班。

您需要在操作运行之前添加操作。

一个有用的心智模型是将行为视为事件。当您指定add_action 属于add_filter 这等于说;从现在起,当此操作运行时,请执行以下操作。

这也是为什么在模板文件中看不到主题添加过滤器和操作的原因。这些插件和functions.php 因为这些文件加载得更早。

SO网友:Antti Koskinen

正如Howdy\\u McGee和Tom J Nowell指出的那样,问题在于WordPress中动作的顺序和事件发生的顺序。

您可以在模板文件中自定义操作,

// header.php
do_action(\'my_custom_action\');
要针对这些操作,您应该将它们的回调添加到functions.php 文件您可以使用the conditional helper functions 如果只需要在某些模板上运行回调,请检查上下文。这里有几个例子,

// Do something on every template/view
add_action(\'my_custom_action\', \'my_global_header_function\');

// conditional checks directly in the callback
add_action(\'my_custom_action\', \'my_custom_action_callback\');
function my_custom_action_callback() {

    // Blog page specific
    if ( is_home() ) {
        my_blog_header_function();
    }

    // Only pages
    if ( is_page() ) {
        my_page_header_function();
    }
}

// conditional checks on earlier action
// more typical way to do this in my experience
add_action(\'template_redirect\', \'my_template_redirect_callback\');
function my_template_redirect_callback() {
    // Do something on every template/view
    add_action(\'my_custom_action\', \'my_global_header_function\');

    // Blog specific function
    if ( is_home() ) {
        add_action(\'my_custom_action\', \'my_blog_header_function\');
    }

    // Only pages
    if ( is_page() ) {
        add_action(\'my_custom_action\', \'my_page_header_function\');
    }
}

function my_global_header_function() {
    echo \'This works everywhere\';
}

function my_blog_header_function() {
    echo \'This the blog page\';
}

function my_page_header_function() {
    echo \'This is a page\';
}
另外,在抄本上有一个很好的参考列表,列出了WordPress默认触发的不同操作,Action Reference.