如何为WordPress插件设置页面(管理面板)创建部分(表单)?

时间:2016-01-21 05:37:16

标签: php wordpress wordpress-plugin herbert

我正在使用Herbert插件框架并正在创建一个插件。

以下是我正在使用的代码:

panels.php

$panel->add([
    'type' => 'panel',
    'as'   => 'mainPanel',
    'title' => 'Plugin',
    'rename' => 'General',
    'slug' => 'plugin-admin-settings',
    'icon' => 'dashicons-chart-area',
    'uses' => __NAMESPACE__ . '\Controllers\PluginController@createAdminPage'
]);

现在是PluginController

 <?php
    namespace Plugin\Controllers;

    use Herbert\Framework\Models\Option;
    use Herbert\Framework\RedirectResponse;
    use Herbert\Framework\Http;
    use \Google_Client;
    use \Google_Service_Analytics;
    use Plugin\Helper;

    class PluginController {

        public static function createAdminPage()
        {
            $this->option = get_option('pluginAuthenticationSetting');

            //if (!isset($this->option['authenticationCode'])):
            //if (get_option('pluginAuthenticationSetting') == FALSE):

                return view('@Plugin/auth.twig', [
                  'title'   => 'Analytics Reports',
                  'content' => SELF::settings()
                ]);
            //endif;
        }

        public static function settings()
        {
            settings_fields('pluginAuthenticationSetting');
            do_settings_sections('pluginAuthenticationSetting');
            submit_button();
        }

        public static function pageInit()
        {
            wp_register_script(
                'plugin',
                Helper::assetUrl('/jquery/plugin.js'),
                array( 'jquery' )
            );

            wp_localize_script(
               'plugin',
               'ajax_object',
               array( 'ajax_url' => admin_url( 'admin-ajax.php' ),
               'we_value' => 1234 )
            );

            register_setting(
               'pluginAuthenticationSetting',
               'plugin_authorization_setting',
               array( __CLASS__, 'sanitize' )
            );

            add_settings_section(
               'authenticationSection',
               'Authentication Section',
               array( __CLASS__, 'printAuthenticationSection' ),
               'pluginAuthenticationSetting'
            );

            add_settings_field(
               'authenticationCode',
                'Authentication Code',
               array( __CLASS__, 'authenticationCodeCallback' ),
               'apluginAuthenticationSetting',
               'authenticationSection'
            );
        }

        public function sanitization( $input )
        {
            $new_input = array();

            if (isset( $input['authenticationCode']))
                $new_input['authenticationCode'] = sanitize_text_field($input['authenticationCode']);

            return $new_input;
        }

        public static function printAuthenticationSection()
        {
            print 'Enter Your Authentication Code Below:';
        }

        public static function authenticationCodeCallback()
        {

            printf( '<input type="text" id="authentication" name="analyticaAuthenticationSetting[authenticationCode]" value="%s" />', isset( $this->option['authenticationCode'] ) ? esc_attr( $this->option['authenticationCode'] ) : '');
        }
    }

现在pageInit()需要admin_init挂钩。如果我创建一个构造函数并尝试add_action('admin_init', array(__CLASS__, 'pageInit'));,它就不起作用了。如果我在面板创建中使用它并调用createAdminPage taht也无法正常工作。怎么做?

它不会产生任何错误,只会显示提交按钮。

1 个答案:

答案 0 :(得分:0)

我们需要关注我们想要发送数据的位置。

答案:对于WordPress的管理方,也就是说,我们需要使用面板来完成这项工作。当我们向客户端发送数据时,我们使用路由

这是代码。

创建面板

$panel->add([
    'type' => 'panel',
    'as'   => 'mainPanel',
    'title' => 'Analytica',
    'rename' => 'General',
    'slug' => 'analytica-admin-settings',
    'icon' => 'dashicons-chart-area',
    'uses' => __NAMESPACE__ . '\Controllers\AnalyticaController@index',
    'post' => [
        // Sending data to save using post.
        'save' => __NAMESPACE__ . '\Controllers\AnalyticaController@save',
        ]
]);

控制器显示页面并将数据保存在数据库中

<?php namespace Analytica\Controllers;

    use Herbert\Framework\Models\Option;
    use Herbert\Framework\RedirectResponse;
    use Herbert\Framework\Http;
    use Herbert\Framework\Enqueue;
    use Herbert\Framework\Notifier;
    use \Google_Client;
    use Analytica\Helper;

    class AnalyticaController {
        public function index(){
            // Display the form
        }

        public function save(){
            // Validate and save the data
        }
    }

您需要关注use Herbert\Framework\Models\Option;。这意味着有一个名为 Option 的模型代表wp_options表。

现在,我们在这里使用的功能是什么?

我们可以在这里使用Laravel Eloquent和Schema。现在你可以理解它;我们可以在这里做很多事情。就像我们正在使用一些预制模型一样,我们正在开发相同的Laravel。

注意:忘掉钩子一段时间了。我们仍然可以适合主题,但对于大多数情况,我们不需要主题。