我正在用许多小部件构建一个网站。它们是高度定制的。
当站点处于活动状态时,几个管理员/编辑器必须编辑这些小部件。
现在,我很害怕看到一个小部件(及其配置)可以在一次鼠标移动中完全擦除(将其从侧栏中删除)。
有没有什么方法可以防止小部件被删除,同时保持编辑其内容的能力?
此外,在我看来,管理中的widget管理页面为“添加widget”模块提供了太多的空间,而为“激活的widget”模块提供的空间不足。这在创建站点时很有用,但在完成站点时却毫无用处。有没有办法切换这些模块的大小?
非常感谢
最合适的回答,由SO网友:brasofilo 整理而成
我能想到的解决方案是删除可用的面板和不活动的小部件,这样就没有地方可以拖动(和删除)侧栏中使用的小部件。
你可以注入其他东西来填补这个空白。
在本例中,只有一个用户能够添加/删除小部件。
function wpse_53398_script_printer(){
// used to display the front end site
$site = get_site_url();
// here you can filter who can add/delete widgets
global $current_user;
if ( \'kursus\' == $current_user->data->user_login )
{
echo <<<HTML
<!-- CSS to hide the widgets descriptions = real estate gains -->
<style type="text/css">#widget-list .widget-description {display:none;}</style>
<script type="text/javascript">
jQuery(document).ready( function($) {
// swaps the placement of the panels Available Widgets and Incactive Widgets
$(\'#available-widgets\').appendTo(\'#widgets-left\');
});
</script>
HTML;
}
else
{
echo <<<HTML
<!-- CSS to prevent the div from briefly appearing before the jQuery can act -->
<style type="text/css">#widgets-left {display:none;}</style>
<script type="text/javascript">
// reload the contents of the iframe
function Reload () {
var f = document.getElementById(\'the-front-end\');
f.src = f.src;
}
jQuery(document).ready( function($) {
// inject other content to fill the void
$(\'<div style="width:70%;"><input type="button" value="Reload front page" onclick="Reload();" style="float:right"><br /><iframe id="the-front-end" src="{$site}" frameborder="0" width="100%" height="700"></div>\').insertBefore(\'#widgets-left\');
// removes the whole left side of the widgets page
$(\'#widgets-left\').remove();
});
</script>
HTML;
}
}
add_action(\'admin_footer-widgets.php\', \'wpse_53398_script_printer\');
重要提示:
HTML;
关闭行
cannot 在前后有任何空格字符
PS:这个Heredoc syntax <<<HTML code HTML;
阻止代码在WPSE中显示正确格式化的PHP。但代码已经过测试,并且可以正常工作