我在尝试实现这些自定义主题挂钩时感到困惑。试着让我的头脑明白这一点。
我想我明白了。但现在在读了几个小时的代码之后;这让事情变得更糟了。
如何修改下面传递的参数?
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上的几个线程,发现它们对我的上下文没有多大帮助:
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\' );