【问题标题】:Jquery UI dialog in wordpress adminwordpress 管理员中的 Jquery UI 对话框
【发布时间】:2011-03-12 21:40:07
【问题描述】:

我正在尝试在我的 Wordpress 主题管理页面中使用 jQuery UI 对话框脚本。一切都直接来自 UI 演示,但我最终得到了一个对话框,其中对话框没有弹出任何内容,而是埋在底角,就在结束 body 标记之前。

UI 对话框脚本与 wp_enqueue_script 正确排队,因为它显示在源代码中,jquery(来自 google API)和 UI 核心也是如此。

jQuery(document).ready(function($) {
    $("#dialog").dialog();
}); //end onload stuff

然后我的选项页面中有这个:

<div id="dialog" title="Basic dialog">
<p>This is the default dialog which is useful for displaying information. The dialog window can be moved, resized and closed with the 'x' icon.</p>
</div>

【问题讨论】:

  • 好吧,我解决了。再次查看演示,显然有相当多的脚本被排入队列,这些脚本没有被提及为依赖项。 jquery.bgiframe-2.1.1.js.js , jquery.ui.widget.js , jquery.ui.mouse.js ,jquery.ui.draggable.js" ,jquery.ui.position.js , jquery.ui.resizable除了明显的 jquery.ui.dialog.js 之外,似乎都需要 .js
  • 链接已损坏。

标签: jquery wordpress dialog


【解决方案1】:

你应该准备好了。 WP 已经有它的对话框和样式。

以下是使用它的步骤:

  1. 编写用于创建对话框的 jQuery - 必须使用 wp-dialogdialogClass
  2. 使用适当的依赖项 (jquery-ui-dialog) 将上述文件排入 init 队列
  3. 将正确的 WP 样式排入队列 (wp-jquery-ui-dialog)

例如:

// custom.js
jQuery(function($) {
    var $info = $("#modal-content");
    $info.dialog({                   
        'dialogClass'   : 'wp-dialog',           
        'modal'         : true,
        'autoOpen'      : false, 
        'closeOnEscape' : true,      
        'buttons'       : {
            "Close": function() {
                $(this).dialog('close');
            }
        }
    });
    $("#open-modal").click(function(event) {
        event.preventDefault();
        $info.dialog('open');
    });
});    

在你的 PHP 中

add_action( 'admin_enqueue_scripts', 'queue_my_admin_scripts');

function queue_my_admin_scripts() {
    wp_enqueue_script (  'my-spiffy-miodal' ,       // handle
                        URL_TO_THE_JS_FILE  ,       // source
                        array('jquery-ui-dialog')); // dependencies
    // A style available in WP               
    wp_enqueue_style (  'wp-jquery-ui-dialog');
}

【讨论】:

  • 一旦我进行了以下调整,就可以完美运行。 1. 我得到 $info is not defined 错误,b/c 它最初被定义为 $modalContents。所以我用 $info 替换了 $modalContents。 2.而不是在前端的任何地方排队......我将它添加到admin_init。可能会更具体到我的特定管理页面。谢谢!
  • @helga - 是的,使用 $info 是一个错字,admin__init 更好 - 谢谢!
  • 天哪,真是丑陋的对话。我希望 WordPress 能改善它的外观。 X-关闭按钮看起来像是来自其他程序,边框是什么?至少可以通过以下方式获得 WP 原生按钮外观:'buttons' : [{'text' : 'Close', 'class' : 'button-primary', 'click' : function() { $(this).dialog('close');} }](注意 button-primary 类)
  • @Ciantic WordPress 是开源的,因此您可以贡献您的更改。查看以下链接make.wordpress.org/core
【解决方案2】:

我设法使用以下代码显示对话框(但未应用样式!):

add_action('init', 'myplugin_load');

function myplugin_load(){
    wp_enqueue_script( 'jquery' );
    wp_enqueue_script( 'jquery-ui-core' );
    wp_enqueue_script( 'jquery-ui-dialog' );
}

当调用它时:

$("#dialog-view").dialog({
   height: 240,
   modal: true
});

【讨论】:

  • 如果你将jquery-ui-dialog加入队列,它的依赖也会自动加入队列,所以你不需要添加jqueryjquery-ui-core。您可以将您的 JS 排入队列,例如:wp_enqueue_script('my-script-handle', URL_TO_MY_SCRIPT, array('jquery-ui-dialog'));
【解决方案3】:

我不知道它是否有任何区别(因为我目前不在正确的地方进行任何测试),但也许可以完全按照 jQuery UI 网站上的代码尝试:

$(function() {
   $("#dialog").dialog();
});

祝你好运! ^.^

【讨论】:

  • 谢谢,但这并不能解决问题。我读过你必须使用 jQuery(document).ready(function($) { });在 WP 中包装 jquery 函数,并发现这是真的,我已经设法完成了其他几件事
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 2011-03-15
相关资源
最近更新 更多