我试图学习如何使用Wordpress创建插件,但我偶然发现了这个问题:
每当我尝试运行JQuery时,我都会得到未定义的错误等。。。
我尝试了在互联网上找到的不同方法,如取消注册/注册/排队,但似乎没有任何效果。
目标是在插件设置页面中填充文本区域,而无需重新加载/保存页面以创建实时预览。
这就是我现在正在做的:
class plugin
{
public function __construct()
{
add_action("wp_enqueue_scripts", "jquery_enqueue");
add_action( \'admin_menu\', array( $this, \'plugin_page\' ) );
add_action( \'admin_init\', array( $this, \'page_init\' ) );
}
public function jquery_enqueue()
{
wp_deregister_script(\'jquery\');
wp_register_script(\'jquery\', "http" . ($_SERVER[\'SERVER_PORT\'] == 443 ? "s" : "") . "://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js", false, null);
wp_enqueue_script(\'jquery\');
}
public function plugin_page()
{
add_menu_page(
\'...\',
\'...\',
\'...\',
\'...\',
array( $this, \'create_admin_page\' )
);
}
public function create_admin_page()
{
// Set class property
$this->options = get_option( \'my_option_name\' );
?>
<div class="wrap">
<h2>Test</h2>
<form method="post" action="options.php">
<?php
// This prints out all hidden setting fields
settings_fields( \'...\' );
do_settings_sections( \'...\' );
?>
<script>
$( document ).ready(function() {
$( "#my_option_name" ).change(function() {
$.post(
\'classes/dummy.class.php\'
).success(function(x){
json = $.parseJSON(x);
$(\'textarea\').text(json);
});
});
});
</script>
</form>
<textarea></textarea>
</div>
<?php
}}
我遗漏了一些代码,只包含了重要的部分。
最合适的回答,由SO网友:helgatheviking 整理而成
这是一个常见的问题。我刚开始的时候,它一直困扰着我,因为它没有任何意义,除非你知道,否则很难找到它。问题是WordPress捆绑了一个设置为noConflict模式的jQuery版本。因此,要运行脚本,必须使用noConflict wrappers
jQuery(document).ready(function($) {
// Inside of this function, $() will work as an alias for jQuery()
// and other libraries also using $ will not be accessible under this shortcut
});
Update 无需加载不同版本的jQuery。这只会让事情复杂化。让WordPress加载它自己的版本。删除您的jquery_enqueue()
方法
下一步调整create_admin_page()
不直接打印脚本。我认为正在发生的是add_menu_page()
之前运行wp_enqueue_scripts
因此jQuery还不可用。因此,错误。您可以通过向admin_print_footer_scripts
钩
经过如此修改create_admin_page()
现在看起来是这样的:
public function create_admin_page()
{
// Set class property
$this->options = get_option( \'my_option_name\' );
add_action( \'admin_print_footer_scripts\', array( $this, \'footer_scripts\' ) );
?>
<div class="wrap">
<h2>Test</h2>
<form method="post" action="options.php">
<?php
// This prints out all hidden setting fields
settings_fields( \'...\' );
do_settings_sections( \'...\' );
?>
</form>
<textarea></textarea>
</div>
<?php
}
您的新功能是:
public function footer_scripts()
{ ?>
<script>
jQuery( document ).ready(function($) {
$( "#my_option_name" ).change(function() {
$.post(
\'classes/dummy.class.php\'
).success(function(x){
json = $.parseJSON(x);
$(\'textarea\').text(json);
});
});
});
</script>