2016-08-11 3 views
1

私はWordPressプラグインをコーディングしています。最初は、WordPressにメニューを追加していて、各メニューコールバックよりも先にadmin_initが起動され、必要なページが必要です。ここに私の論理ですadmin_init起動しない

<?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がトリガーされていないため、次のページがロードされません。私はエコー1を試みました;出口;コードが私のエコー1に流れるかどうかを確認する必要があります。それでも失敗します。

<?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; 


?> 

答えて

2

は今、add_action('admin_init'...へのお電話は、メニューがレンダリングされているときにいつかまで呼び出さない機能wp_easy_seo_title_cbの内側にある:

は、ここに私のwp_easy_seo_titleページです。これはadmin_initが既に発生した後であり、登録が遅すぎます。

あなたのすべてのコールをadd_actionに移動して、クラスのコンストラクタに移動してみてください。

物事を整理し、すべてが時間通りに登録されていることを確認するために、コンストラクタ内のすべてのアクションを登録するとよいでしょう。

<?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(); 

このように、ファイルがロードされると、すべてのアクションフックが登録されます。コンストラクタはすべてのページ・ロードで実行されるため、フックの登録以外のコンストラクタではそれほど多くは発生しません。

関連する問題