为什么全局$wp_Query没有被挂钩?

时间:2015-02-10 作者:Mac Luc

我有一个插件,可以帮助我在自定义帖子类型的帖子上进行延迟加载。其想法是向template\\u redirect/init添加一个操作,并从全局$wp\\u查询中获取数据,以使jquery了解需要进行多少加载
插件php文件如下所示:

function pbd_alp_init() {
   global $wp_query;

   // Add code to index pages.
   if( !is_singular() ) {   // can i select a specific post type here?
      wp_enqueue_script(
        \'pbd-alp-load-posts\',
        plugins_url( \'js/load-posts.js\', __FILE__ ),
        array(\'jquery\'),
        \'1.0\',
        true
      );

      // What page are we on? And what is the pages limit?
      $max = $wp_query->max_num_pages; // this returns 0
      $paged = ( get_query_var(\'paged\') > 1 ) ? get_query_var(\'paged\') : 1;

      // Add some parameters for the JS.
      wp_localize_script(
        \'pbd-alp-load-posts\',
        \'pbd_alp\',
        array(
            \'startPage\' => $paged,
            \'maxPages\' => $max,
            \'nextLink\' => next_posts($max, false)
        )
      );
  }
}
add_action(\'init\', \'pbd_alp_init\');
我确信当我直接调用max\\u num\\u pages函数时,它会返回一个数字-为什么我的全局$wp\\u查询看起来是空的
在文档中,它说操作应该挂钩到“template\\u redirect”,但“init”似乎更正确?两者都没有连接到wp\\u查询。。

1 个回复
SO网友:Milo

如果你看看Action Reference, 你可以看到事情发生的顺序。

注意其中init 是,查询对象在wp 行动

// ...
init
└─ widgets_init
register_sidebar
wp_register_sidebar_widget
wp_default_scripts
wp_default_styles
admin_bar_init  
add_admin_bar_menus 
wp_loaded
parse_request
send_headers
parse_query
pre_get_posts
posts_selection 
wp
// ...

结束

相关推荐

限制对Options-*.php页面的访问

我有一个名为manager 具有manage_options 和read 功能,我想限制他不要访问设置菜单,你可以说删除manage_options 功能,但事实并非如此,因为我需要这个cap(我使用的是发布到options.php的设置API)。我可以使用remove_menu_page() 但我们仍然可以通过直接键入url进行访问。