我正在使用Herbert插件框架并正在创建一个插件。
以下是我正在使用的代码:
$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也无法正常工作。怎么做?
它不会产生任何错误,只会显示提交按钮。
答案 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。
注意:忘掉钩子一段时间了。我们仍然可以适合主题,但对于大多数情况,我们不需要主题。