然后只需添加一个管理页面add_submenu_page()
或add_menu_page()
或相关功能。
最后通过添加脚本wp_register/enqueue_script()
在admin_enqueue_scripts
-钩你开枪了ajax (搜索存档)调用并更新表。
使用ajax 在插件中,这非常简单。这是一个快速模型。它显示了执行每个可能的AJAX调用所需的所有内容。我将脚本的注册和队列分割开来,这样您就可以在需要时随时随地将脚本排队。
为了安全起见,已经实施了Nonces和referer检查。它使用一个常量命名方案,这样就不会太容易混淆(尤其是对于nonce检查)。
使用共享名称的OOP构造PHP:
class WPSEexampleAJAX
{
public $name = \'wpse\';
public function __construct()
{
add_action( \'wp_loaded\', array( $this, \'scriptsRegister\' ) );
add_action( \'admin_enqueue_scripts\', array( $this, \'scriptsEnqueue\' ) );
// Logged in users - everybody in Admin
add_action( "wp_ajax_{$this->name}_action", array( $this, \'ajaxCb\' ) );
// Guests/not logged in
add_action( "wp_ajax_nopriv_{$this->name}_action", array( $this, \'ajaxCb\' ) );
add_action( \'admin_enqueue_scripts\', array( $this, \'scriptsLocalize\' ) );
}
public function scriptsRegister( $page )
{
$file = \'WPSEexample.js\';
wp_register_script(
$this->name,
plugins_url( "assets/scripts/{$file}", __FILE__ ),
array(
\'jquery\',
// \'add other possible dependencies in here\',
),
filemtime( plugin_dir_path( __FILE__ )."assets/scripts/{$file}" ),
true
);
}
public function scriptsEnqueue( $page )
{
wp_enqueue_script( $this->name );
}
public function scriptsLocalize( $page )
{
wp_localize_script( $this->name, "{$this->name}Object", array(
\'ajaxurl\' => admin_url( \'admin-ajax.php\' ),
\'_ajax_nonce\' => wp_create_nonce( "{$this->name}_action" ),
\'action\' => "{$this->name}_action",
\'post_type\' => get_current_screen()->post_type,
// \'foo\' => \'bar\',
) );
}
public function ajaxCb()
{
$data = array_map( \'esc_attr\', $_GET );
check_ajax_referer( $data[\'action\'] );
// DO STUFF IN HERE
wp_send_json_success( array(
// \'foo\' => \'bar\',
) );
}
}
JavaScript在注册的JavaScript文件中是一个实际的AJAX发送/捕获,您只需启动AJAX调用并检索结果。现在你有了不同的切入点,可以截取或捕捉到结果。该脚本实际上没有做任何事情,只是登录到控制台。这个
wpseObject
已本地化的在函数调用中有一个别名,因此您可以简单地使用
plugin
相反我喜欢这样做,这样我以后就可以很容易地识别本地化对象(也可以写得更短)。这只是我个人的命名惯例。
( function( $, plugin ) {
"use strict";
$.ajax( {
url : plugin.ajaxurl,
data : {
action : plugin.action,
_ajax_nonce : plugin._ajax_nonce,
foo : plugin.foo,
},
beforeSend : function( d ) {
console.log( \'AJAX Before send\', d );
}
} )
.done( function( response, textStatus, jqXHR ) {
// console.log( \'AJAX done\', data, textStatus, jqXHR, jqXHR.getAllResponseHeaders() );
} )
.fail( function( jqXHR, textStatus, errorThrown ) {
console.log( \'AJAX failed\', jqXHR.getAllResponseHeaders(), textStatus, errorThrown );
} )
.then( function( jqXHR, textStatus, errorThrown ) {
console.log( \'AJAX after\', jqXHR, textStatus, errorThrown );
} );
} )( jQuery || {}, wpseObject || {} );
有关
$.ajax()
呼叫
in the official jQuery documentation.
提示:确保始终使用WordPress core中的jQuery,而不使用CDN版本。否则,您可能会遇到冲突或版本过时的问题,以防用户更新核心,而不是插件。