【问题标题】:Wordpress plugin settings pageWordpress 插件设置页面
【发布时间】:2016-08-16 16:34:47
【问题描述】:

我正在编写我的第一个 WP 插件,所以我从简单开始。我想我会创建一个简单的插件,将 Google Analytics sn-p 注入页眉。一切似乎都正常,除了插件设置页面是空白的。应该有一个简单的表单,我可以在其中输入 Analytics UA,但页面完全空白。我一遍又一遍地查看代码,但没有发现问题。

<?php 
    /*
    Plugin Name: Analytics
    Plugin URI: https://chriscather.wordpress.com
    Description: Plugin for adding Google Analytics to website
    Author: C. Cather
    Version: 1.0
    Author URI: https://chriscather.wordpress.com
    */

add_action('admin_menu', 'cc_analytics_menu');

function cc_analytics_menu() {
    add_menu_page('CC Analytics', 'CC Analytics', 'administrator', 'cc_analytics_settings_page', 'cc_analytics_menu', plugins_url('analytics/images/analytics.png'));
}

add_action( 'admin_init', 'cc_analytics_settings' );

function cc_analytics_settings() {
    register_setting( 'cc_analytics_settings_group', 'accountant_name' );
}

function cc_analytics_settings_page(){?>
    <div class="wrap">
        <h2>Staff Details</h2>
        <form method="post" action="options.php">
            <?php settings_fields( 'cc_analytics_settings_group' ); ?>
            <?php do_settings_sections( 'cc_analytics_settings_group' ); ?>
            <table class="form-table">
                <tr valign="top">
                <th scope="row">Accountant Name</th>
                <td><input type="text" name="accountant_name" value="<?php echo esc_attr( get_option('accountant_name') ); ?>" /></td>
                </tr>
            </table>
            <?php submit_button(); ?>
        </form>
    </div>
<?php }

add_action( 'wp_head', 'cc_analytics' );
    function cc_analytics() { ?>
        <script>
            (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
            (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
            m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
            })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

            ga('create', "<?php cc_analytics_settings_group('accountant_name') ?>", 'auto');
            ga('send', 'pageview');

        </script>
    <?php }

【问题讨论】:

    标签: php wordpress plugins google-analytics


    【解决方案1】:

    我解决了这个问题,而不是使用 PHP 变量来调用 Google Analytics 代码,而是从“设置”页面中的表单调用函数。

    ga('create', '<?php echo get_option('accountant_name', ''); ?>', 'auto');
    

    【讨论】:

      【解决方案2】:

      只需在add_menu_page 中重命名cc_analytics_menu 参数即可。

      您的代码:

       add_menu_page('CC Analytics', 'CC Analytics', 'administrator', 'cc_analytics_settings_page', 'cc_analytics_menu', plugins_url('analytics/images/analytics.png'));
      

      修改代码:

      cc_analytics_menu 重命名为cc_analytics_menu_function

      还有重命名回调函数:

      add_menu_page('CC Analytics', 'CC Analytics', 'administrator', 'cc_analytics_settings_page', 'cc_analytics_menu_function', plugins_url('analytics/images/analytics.png'));
      
      function cc_analytics_menu_function(){?>
          <div class="wrap">
              <h2>Staff Details</h2>
              <form method="post" action="options.php">
                  <?php settings_fields( 'cc_analytics_settings_group' ); ?>
                  <?php do_settings_sections( 'cc_analytics_settings_group' ); ?>
                  <table class="form-table">
                      <tr valign="top">
                      <th scope="row">Accountant Name</th>
                      <td><input type="text" name="accountant_name" value="<?php echo esc_attr( get_option('accountant_name') ); ?>" /></td>
                      </tr>
                  </table>
                  <?php submit_button(); ?>
              </form>
          </div>
      <?php }
      

      完整的插件代码:

      <?php 
          /*
          Plugin Name: Analytics
          Plugin URI: https://chriscather.wordpress.com
          Description: Plugin for adding Google Analytics to website
          Author: C. Cather
          Version: 1.0
          Author URI: https://chriscather.wordpress.com
          */
      
      add_action('admin_menu', 'cc_analytics_menu');
      
      function cc_analytics_menu() {
          add_menu_page('CC Analytics', 'CC Analytics', 'administrator', 'cc_analytics_settings_page', 'cc_analytics_menu_function', plugins_url('analytics/images/analytics.png'));
      }
      
      add_action( 'admin_init', 'cc_analytics_settings' );
      
      function cc_analytics_settings() {
          register_setting( 'cc_analytics_settings_group', 'accountant_name' );
      }
      
      function cc_analytics_menu_function(){?>
          <div class="wrap">
              <h2>Staff Details</h2>
              <form method="post" action="options.php">
                  <?php settings_fields( 'cc_analytics_settings_group' ); ?>
                  <?php do_settings_sections( 'cc_analytics_settings_group' ); ?>
                  <table class="form-table">
                      <tr valign="top">
                      <th scope="row">Accountant Name</th>
                      <td><input type="text" name="accountant_name" value="<?php echo esc_attr( get_option('accountant_name') ); ?>" /></td>
                      </tr>
                  </table>
                  <?php submit_button(); ?>
              </form>
          </div>
      <?php }
      
      add_action( 'wp_head', 'cc_analytics' );
          function cc_analytics() { ?>
              <script>
                  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
                  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
                  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
                  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
      
                  ga('create', "<?php cc_analytics_settings_group('accountant_name') ?>", 'auto');
                  ga('send', 'pageview');
      
              </script>
          <?php }
      

      【讨论】:

      • 表单现在出现在后端,万岁!但是,我刚刚意识到我在 javascript 中使用 PHP 调用会导致页面中断。瘸。我想出了这个调用,但我不确定如何创建变量:'" . $trackerCode . "' 我尝试了类似$trackerCode = cc_analytics_menu_function(accountant_name); 之类的简单方法,但这打破了页面。
      猜你喜欢
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-01
      • 2015-12-05
      • 1970-01-01
      • 2015-02-13
      • 1970-01-01
      相关资源
      最近更新 更多