Evitar a remoção de widgets

5

Estou criando um site com muitos widgets. Eles foram altamente personalizados.

Vários administradores / editores terão que editar esses widgets quando o site estiver ativo.

Neste momento, estou com medo de ver que um widget (e sua configuração) pode ser totalmente apagado em um único movimento do mouse (soltando-o da barra lateral).

Existe alguma maneira de impedir a remoção de widgets, mantendo a capacidade de editar seu conteúdo?

Além disso, a página de gerenciamento de widgets da Administração fornece, na minha opinião, muito espaço para o módulo "add widget" e não o suficiente para o módulo "widget ativado". Isso é útil ao criar um site, mas é inútil quando o site é concluído. Existe alguma maneira de mudar o tamanho desses módulos?

Muito obrigado

    
por kursus 26.05.2012 / 19:55

2 respostas

2

A solução que consigo imaginar é remover os painéis Widgets Disponíveis e Inativos para que simplesmente não exista nenhum lugar para arrastar (e excluir) os widgets usados na barra lateral.

Você pode injetar outra coisa para preencher a lacuna.

Neste exemplo, apenas um usuário pode adicionar / excluir widgets.

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');

Importante: a linha de fechamento HTML; não pode ter nenhum caractere de espaços em branco antes ou depois

PS: esta sintaxe Heredoc <<<HTML code HTML; está impedindo o código de exibir o PHP formatado corretamente aqui no WPSE. Mas o código é testado e funciona.

    
por brasofilo 28.05.2012 / 22:29
2

O probema de excluir widgets é mais geral, é causado pelo desenvolvedor e pelo editor usando a mesma interface de back-end. Problemas semelhantes, como excluir widgets, são - inserir imagens no tamanho errado - adicionar fontes que não foram planejadas pelo designer - criar mais itens de menu do que permitido .. e muito mais

A solução é simples, dê aos editores sua própria interface. E, provavelmente, a melhor maneira de fazer isso é: deixar essa interface parecer o próprio site. Essa abordagem é o que eu chamo de "frontend CMS"

O editor de frontend é um plugin gratuito que pode ser usado para isso. Eu mesmo escrevi um plugin que leva essa filosofia um pouco além, frontendcms.com . Não é grátis, no entanto.

    
por Carlo Roosen 18.10.2012 / 15:15

Tags