WordPress管理面板有三个小部件区域:
所有可用的小部件注册侧栏,以便将小部件从“所有可用的小部件”或“非活动的小部件”设置为“错误的”侧栏时不可删除。widget类和标识它的id。我需要将“自定义最近帖子”小部件设置为不可删除,以便:
从以下位置拖动:可用小部件区域、非活动小部件区域
$(\'.widget\').on( \'dragcreate dragstart\', function( event, ui ){
id = $(this).find( \'input[name="id_base"]\').val();
if( id == \'custom_recent_posts\' ){ //check if the widget is the right one
$(this).draggable({
connectToSortable: \'#primary-sidebar, #wp_inactive_widgets\'//limit drop event only to these sidebars
})
}
});
没关系,但活动小部件会发生什么情况?这些小部件不受“拖动”的影响,但受“排序”的影响。这一部分有点棘手,可能我的解决方案不酷,但它可以工作:)我需要将“自定义最近帖子”小部件设置为不可排序(您可以拖动,在jquery逻辑中是一种排序):
从活动窗口小部件中拖动/排序:
$( \'.widgets-sortables\' ).on( \'sortactivate sort\', function( event, ui ){
id = $(ui.item).find( \'input[name="id_base"]\').val();
if ( id == \'custom_recent_posts\'){//identifying the wrong or right widget
if ( $(ui.sender).attr( \'id\' ) != \'primary-sidebar\' ){// if it\'s coming from a sidebar that is not his "right" place, set \'connectWith\' option to this sidebar and the inactive widgets area
$(this).sortable(\'option\', \'connectWith\', \'#primary-sidebar, #wp_inactive_widgets\');
$(this).sortable(\'refresh\');
}else{//else set \'connectWith\' to false
$(this).sortable(\'option\', \'connectWith\', false);
$(this).sortable(\'refresh\');
}
}else{// else default behavior
$(this).sortable(\'option\', \'connectWith\', \'div.widgets-sortables\');
$(this).sortable(\'refresh\');
}
});
我需要在我的项目中使用相同的逻辑,我现在正在测试,它似乎像预期的那样工作尝试:)希望它有帮助