WordPress:如何实现header.php加载完成后输出文本?
解决get_header钩子在header内容前执行的问题
嘿,我来帮你理清楚这个问题——你踩了一个WordPress钩子时机的小坑!
问题原因
你用的get_header钩子,它的执行时机是在header.php模板文件开始加载之前,所以不管你把优先级设得有多高(哪怕是100000),你的menu_call()函数都会在header的实际内容输出前运行,这就是为什么文本出现在header内容前面的原因。
解决方案
根据你想要的输出位置,有几个靠谱的选项:
1. 在header末尾(</head>前)输出
如果你的文本可以放在header的头部区域末尾(比如</head>标签之前),可以用wp_head钩子——这个钩子是在主题header.php里的wp_head()函数调用时触发,几乎所有正规主题都会包含这个函数:
add_action( 'wp_head', 'menu_call' ); function menu_call() { echo "Menu has loaded"; }
2. 在body开头(header完全加载后)输出
如果你想要在header完全结束后(比如</header>标签之后,页面主体内容之前)输出文本,可以用wp_body_open钩子(WordPress 5.2+支持)。需要确保你的主题在<body>标签后调用了wp_body_open()函数:
add_action( 'wp_body_open', 'menu_call' ); function menu_call() { echo "Menu has loaded"; }
如果你的主题没有wp_body_open(),可以手动在header.php的<body>标签后添加一行:<?php wp_body_open(); ?>。
3. 自定义钩子(最灵活)
如果需要精确控制输出位置,你可以在header.php里添加一个自定义钩子,然后挂载你的函数:
首先打开主题的header.php,找到你想要输出文本的位置(比如</header>标签之后),添加:
<?php do_action('after_header'); ?>
然后在你的主题functions.php里添加:
add_action( 'after_header', 'menu_call' ); function menu_call() { echo "Menu has loaded"; }
这种方法能让你完全控制文本的输出位置,不受默认钩子的限制。
内容的提问来源于stack exchange,提问作者user379888
相关产品推荐
相关产品推荐

