8

我正在尝试在我的主题中构建一个功能,该功能依赖于在发送标头之前执行的操作。所以很自然地我像这样挂入了 Init 钩子:

add_action('init', 'my_function');

但问题是我只希望 my_function 在用户不查看管理部分或登录页面时运行。

那么我可以使用什么钩子,它只是前端,但在发送标头之前运行。查看 API 参考,似乎没有,显然条件在运行时的早期不起作用。

因此,除了搜索 /wp-admin/ 和 /wp-login/ 的 URL(这对我来说似乎很笨拙)之外,我无法弄清楚。

4

4 回答 4

8

将你的动作的钩子和函数包装在一个if(!is_admin()){}

像这样:

if(!is_admin()) {
  //Style
  add_action('init', 'style');

  function style()
  {
      wp_enqueue_style('style', THEMEROOT . '/css/your.css');
  }
}
于 2014-04-15T23:29:46.240 回答
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' );

它不是超级优雅,但至少它是简洁的。而且它似乎很可能会继续工作,这总是好消息。

于 2012-08-31T18:07:11.787 回答
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');

就是这样,使用并看到魔法。

于 2014-06-08T09:06:42.963 回答
0

我只针对前端(不是管理员)的解决方案也是检查引用者,因为有一些 ajax 调用直接指向非/wp-adminurl 序列,并且is_admin()不固定。看来他正在查看这段 URL。

// Skip for admin
if ( is_admin() || ( $_SERVER['HTTP_REFERER'] && strpos( $_SERVER['HTTP_REFERER'], 'wp-admin' ) !== false ) ) {
    return;
}
于 2020-10-08T16:46:33.507 回答