我正在尝试在我的主题中构建一个功能,该功能依赖于在发送标头之前执行操作。所以很自然地我像这样迷上了Init钩子:
add_action('init', 'my_function');
但问题是,如果用户没有查看管理部分或登录页面,我只想运行my_function。
那么我可以使用哪种钩子只是前端,但是在发送头之前运行。 Looking at the API reference,似乎没有,显然条件在运行时的早期不起作用。
除了搜索/ wp-admin /和/ wp-login /的URL之外(这对我来说似乎很笨)我无法理解。
答案 0 :(得分:6)
在if(!is_admin()){}
像这样:
if(!is_admin()) {
//Style
add_action('init', 'style');
function style()
{
wp_enqueue_style('style', THEMEROOT . '/css/your.css');
}
}
答案 1 :(得分:2)
我是这样做的。使用wp
操作挂钩已经足够晚,可以提供对查询的访问,从而提供条件,但仍然可以在模板设置之前进行。
<?php
function my_function() {
if ( ! is_admin() && ! is_login_page() ) {
// Enqueue scripts, do theme magic, etc.
}
}
add_action( 'wp', 'my_function' );
function is_login_page() {
return in_array($GLOBALS['pagenow'], array('wp-login.php', 'wp-register.php'));
}
编辑:我误解了你的标题是什么意思(我在考虑wp_head
...最近主题编码太多了!)。我现在假设你试图击败send_headers
行动:
function my_function() {
if ( 'index.php' == $GLOBALS['pagenow'] ) {
// Pre-header processing on the front-end
}
}
add_action( 'wp_loaded', 'my_function' );
这不是超级优雅,但至少它简洁明了。 it seems likely it will continue to work,这总是好消息。
答案 2 :(得分:1)
这里有一些很好的解决方案,希望大家都喜欢。
function my_func(){
if ( !is_admin())
{
// add code here for show only in front-end or create another function outside this block and call that function here.
}
else
{
// add code here for show only in admin or create another function outside this block and call that function here.
}}add_action ('init', 'my_func');
就是这样,使用并看到魔力。
答案 3 :(得分:0)
我对前端(而非管理员)的解决方案也是检查引荐,因为存在一些直接指向非/wp-admin
url序列的ajax调用,并且is_admin()
是不固定的。看来他在看这个网址。
// Skip for admin
if ( is_admin() || ( $_SERVER['HTTP_REFERER'] && strpos( $_SERVER['HTTP_REFERER'], 'wp-admin' ) !== false ) ) {
return;
}