首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >admin_init未被触发

admin_init未被触发
EN

Stack Overflow用户
提问于 2016-08-11 21:23:32
回答 1查看 1.3K关注 0票数 2

我正在编写一个WordPress插件,在这个插件中,我首先要向WordPress添加菜单,而不是每个菜单回调首先触发admin_init,而不是需要所需的页面。这是我的逻辑

代码语言:javascript
复制
<?php

class EasySEO
{

    public function __construct()
    {

        $this->wp_easy_seo_register_menu_page();
    }

    public function wp_easy_seo_register_menu_page()
    {
        add_menu_page('Easy SEO : General Setting', 'Easy SEO', 'manage_options', 'wp-easy-seo-dashboard', array(
            $this,
            'wp_easy_seo_general_cb'
        ));
        add_submenu_page('wp-easy-seo-dashboard', 'Easy SEO : General Setting', 'General', 'manage_options', 'wp-easy-seo-dashboard', array(
            $this,
            'wp_easy_seo_general_cb'
        ));
        add_submenu_page('wp-easy-seo-dashboard', 'Title & Metas - Easy SEO', 'Title & Metas', 'manage_options', 'wp_easy_seo_title', array(
            $this,
            'wp_easy_seo_title_cb'
        ));
        add_submenu_page('wp-easy-seo-dashboard', 'Verify Domain Ownership - Easy SEO', 'Domain Verification', 'manage_options', 'wp_easy_seo_domain_ownership_verify', array(
            $this,
            'wp_easy_seo_domain_ownership_verify_cb'
        ));
        add_submenu_page('wp-easy-seo-dashboard', 'Web Traffic Statistics - Easy SEO', 'Traffic Statistics', 'manage_options', 'wp_easy_seo_traffic_statistics', array(
            $this,
            'wp_easy_seo_traffic_statistics_cb'
        ));

    }

    function wp_easy_seo_general_cb()
    {



    }

    function wp_easy_seo_title_cb()
    {
        add_action('admin_init', function()
        {
            require 'wp_easy_seo_title.php';
        });


    }

    function wp_easy_seo_domain_ownership_verify_cb()
    {
        require 'wp_easy_seo_domain_ownership_verify.php';
    }


    function wp_easy_seo_traffic_statistics_cb()
    {
        require 'wp_easy_seo_traffic_statistics.php';
    }


}

add_action('admin_menu', function()
{   
    new EasySEO;   
});
?>

Admin_init没有被触发,这就是下一页没有加载的原因。我尝试了echo 1;退出;相反,要求检查代码是否流到回显1;但仍然失败。

这是我的wp_easy_seo_title页面:

代码语言:javascript
复制
<?php

class EasySEO_Options {

    public $options;

    public function __construct() {

        $this->options=  get_option('wp_easyseo_homepage_options');

        $this->easy_seo_display_options_page();
         $this->wp_easy_seo_register_settings_and_field();

    }

    public function easy_seo_display_options_page() {

        ?>
        <div class='wrap'>
            <h2>Title & Metas - Easy SEO</h2>
            <form action="options.php" enctype="multipart/form-data" method="POST">
        <?php


       settings_fields('wp_easyseo_homepage_options');
       do_settings_sections('wp_easy_seo_title');

        ?>

                <p class="submit">
                    <input name='submit' type='submit' class='button-primary' value='Save Changes'/>

                </p>
            </form>

        </div>
        <?php

    }



    public function wp_easy_seo_register_settings_and_field() {


        register_setting('wp_easyseo_homepage_options', 'wp_easyseo_homepage_options');
        add_settings_section('wp-easyseo-main-settings', 'Title & Metas', array($this, 'wp_easyseo_main_settings_cb'), 'wp_easy_seo_title');
        add_settings_field('wp-easy-seo-title', 'Meta Title', array($this, 'wp_easy_seo_title_cb'), 'wp_easy_seo_title', 'wp-easyseo-main-settings');
        add_settings_field('wp-easy-seo-description', 'Meta Description', array($this, 'wp_easy_seo_description_cb'), 'wp_easy_seo_title', 'wp-easyseo-main-settings');
    }

    public function wp_easyseo_main_settings_cb() {

    }

    /**
     * Inputs
     */
    public function wp_easy_seo_title_cb() {

       echo "<input name='wp_easyseo_homepage_options[wp-easy-seo-title]' value='{$this->options['wp-easy-seo-title']}' type='text'/>";
    }

    public function wp_easy_seo_description_cb() {
        echo "<input name='wp_easyseo_homepage_options[wp-easy-seo-description]' value='{$this->options['wp-easy-seo-description']}' type='text'/>";
    }

}

new EasySEO_Options;


?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-12 03:39:33

现在,您对add_action('admin_init'...的调用位于一个函数wp_easy_seo_title_cb中,该函数在菜单呈现的某个时候才会被调用。这是在admin_init已经发生之后,所以注册太晚了。

尝试将所有对add_action的调用转移到类的构造函数。

我发现在构造函数中注册所有操作是很好的,这样可以使事情组织起来,并确保所有的事情都能及时注册。

代码语言:javascript
复制
<?php

class SomePlugin {

    public function __construct() {
        add_action('admin_init', array($this, 'some_callback'));
        add_action('transition_post_status', array($this, 'other_callback'));
        // etc
    }

    public function some_callback() {
        // Do something
    }

    public function other_callback() {
        // Do something
    }
}

new SomePlugin();

这样,当文件被加载时,它会立即注册所有的动作钩子。除了注册钩子之外,构造函数中不应该发生其他事情,因为构造函数将在每个页面负载上运行。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38906370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档