如何在自定义菜单管理中禁用菜单项的排序/拖动?

时间:2013-03-13 作者:Jarrod

我认为我的问题部分是javascript问题,但如果有人知道更好的方法,我很乐意听到。

基本上,目标是通过不允许客户机在自定义菜单中的某些菜单项周围移动来“保护客户机”。出于SEO原因。这是否有意义与问题无关:)

我正在尝试通过添加一个脚本来禁用该项目的可排序性:jQuery("#menu-item-10 dt").sortable("destroy");

dt是nav菜单中调用的可排序方法的“句柄”。WP core的js。我将进行一些更改以动态获取正确的菜单项ID,但基本上这就是我正在尝试的。我也试过了。没有运气的可排序({禁用:true})。我总是会遇到一个错误:`未捕获错误:无法在初始化之前调用sortable上的方法;试图调用方法“destroy”

我试过很多不同的方法。我的脚本在文档中。ready wrap,我已经使用admin\\u footer-hook\\u后缀hook(在本例中,hook\\u后缀是nav-menus.php)在admin页脚的底部运行了它。我已将其置于setTimeout中,以确保它在加载所有其他内容后运行。

关于我做错了什么,或者我如何才能做得更好,有什么想法吗?或者我可以提供哪些其他信息来帮助您更清楚地了解这一点?

谢谢

3 个回复
最合适的回答,由SO网友:Jarrod 整理而成

对于我的情况,答案是:“不要这样做。”

我删除了我想隐藏的菜单项,它恰好是“Home”菜单项,只使用wp\\u nav\\u菜单上的默认show\\u Home参数将其添加到菜单中。有点傻,我以前没意识到我可以这么做。

SO网友:brasofilo

以下是诀窍:

add_action( \'admin_footer-nav-menus.php\', \'block_sortables_wpse_90610\' );

function block_sortables_wpse_90610()
{
    ?>
    <script type="text/javascript">
    jQuery(document).ready(function($) {   
        $("dt.menu-item-handle").sortable({ disabled: false });
    });             
    </script>
    <?php   
}
这也适用于:sortable(false).

文档:http://api.jqueryui.com/sortable/#option-disabled

SO网友:Hernaldo Gonzalez

在我的例子中(jQuery UI v1.9.2)

我只有:

$this.sortable("destroy");
我得到:

未捕获错误:无法在初始化之前调用sortable上的方法;试图调用方法“destroy”

我修复了添加验证时的问题:

if ($this.data( "ui-sortable" )) {
   $this.sortable("destroy");
}

结束

相关推荐

“ADMIN_ENQUEUE_SCRIPTS”挂钩还是$_GET[‘PAGE’]?

将函数添加到“admin\\u enqueue\\u scripts”时,会向该函数传递一个钩子。它看起来像是“toplevel\\u page\\u nameofyourpage”。这很好,但它与检查$\\u GET变量以查看您所在的页面有何不同?一个优先于另一个吗?为什么?我只是说当你创建自己的菜单时,而不是默认的管理页面。