自定义主题挂钩/过滤器-传递参数

时间:2011-08-01 作者:chrisjlee

我在尝试实现这些自定义主题挂钩时感到困惑。试着让我的头脑明白这一点。

我想我明白了。但现在在读了几个小时的代码之后;这让事情变得更糟了。

如何修改下面传递的参数?

functions.php

function theme_content() {
   do_action(\'theme_content\'); // Initialize my custom hook
}


function theme_content_alter($arg) {
   // Do processing
   if (!$arg) {
     echo \'<h2>default</h2>\';
   }
   if ($arg == \'foo\')  {
     echo \'<div class="content">bar</div>\';
   }

   echo apply_filters(\'theme_content\',\'theme_content_alter\', $arg);
} add_action(\'theme_content\', \'theme_content_alter\');

index.php

theme_content($arg = \'foo\');

What i\'m trying to achieve

能够覆盖钩子并处理函数或独立于require的文件中的上下文处理。

An example: 在首页上,我希望theme\\u content()没有侧边栏,但在子页上,它将包含侧边栏等。可以这样表示:

这是正确的方法吗?我试着把它写在我的主题中,但还没有弄明白为什么它不起作用。参数中没有传递我的参数。

What i have done

查看了此SE上的几个线程,发现它们对我的上下文没有多大帮助:

2 个回复
最合适的回答,由SO网友:Rarst 整理而成

如果你愿意theme_content 使用传递给的参数运行的钩子theme_content() 函数您需要这样编写:

function theme_content($args) {

   do_action(\'theme_content\', $args);
}

SO网友:Chris_O

Rarst的回答很好。如果没有$args 在钩子初始化函数中,并调用global $post 在处理函数中使其工作。

我还想进一步介绍一下Rarst的答案,并指出,与其重复这些值,不如将它们分配给$arg 变量,否则arg“foo”也将在内容中获得输出。您也不需要输入钩子名称apply_filters.

这是您的代码更新(这已经过测试并正常工作)

function theme_content( $arg ) {
   do_action(\'theme_content\', $arg ); // Initialize my custom hook
}


function theme_content_alter( $arg ) {
    if( !$arg ) {
    $arg = \'<h2>default</h2>\';
    } elseif ( $arg == \'foo\' ) {
    $arg = \'<div class="content">bar</div>\';
    }

    echo apply_filters( \'theme_content_alter\', $arg );

}
add_action( \'theme_content\', \'theme_content_alter\' );

结束

相关推荐

hooks & filters and variables

我是updating the codex page example for action hooks, 在游戏中完成一些可重用的功能(最初是针对这里的一些Q@WA)。但后来我遇到了一个以前没有意识到的问题:在挂接到一个函数以修改变量的输出后,我再也无法决定是要回显输出还是只返回它。The Problem: 我可以修改传递给do_action 用回调函数钩住。使用变量修改/添加的所有内容仅在回调函数中可用,但在do_action 在原始函数内部调用。很高兴:我将其修改为一个工作示例,因此您可以将其复制/粘贴