WordPress插件设置页面


Wordpress plugin settings page

我正在编写我的第一个WP插件,所以我开始很简单。我想我会创建一个简单的插件,将谷歌分析片段注入页面标题。一切似乎都正常,除了插件设置页面是空白的。应该有一个简单的表单,我可以在其中输入分析 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 变量来调用 Google Analytics 代码,而是从"设置"页面中的表单调用该函数。

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

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

您的代码:

 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 }