前端只有Init挂钩的版本?

时间:2012-08-27 19:09:09

标签: wordpress conditional-statements

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

add_action('init', 'my_function');

但问题是,如果用户没有查看管理部分或登录页面,我只想运行my_function。

那么我可以使用哪种钩子只是前端,但是在发送头之前运行。 Looking at the API reference,似乎没有,显然条件在运行时的早期不起作用。

除了搜索/ wp-admin /和/ wp-login /的URL之外(这对我来说似乎很笨)我无法理解。

4 个答案:

答案 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;
}