Impedir la eliminación de widgets

5

Estoy construyendo un sitio con muchos widgets. Han sido altamente personalizados.

Varios administradores / editores tendrán que editar estos widgets cuando el sitio esté activo.

Ahora mismo me da miedo ver que un widget (y su configuración) se puede borrar completamente con un solo movimiento del mouse (dejándolo fuera de la barra lateral).

¿Hay alguna forma de evitar que se eliminen los widgets mientras se mantiene la capacidad de editar su contenido?

Además, la página de administración de widgets en la Administración otorga, en mi opinión, demasiado espacio para el módulo "agregar widget" y no suficiente para el módulo de "widget activado". Esto es útil al crear un sitio, pero es inútil cuando el sitio está terminado. ¿Hay alguna forma de cambiar el tamaño de estos módulos?

Muchas gracias

    
pregunta kursus 26.05.2012 - 19:55

2 respuestas

2

La solución en la que puedo pensar es eliminar los paneles Widgets disponibles e inactivos, por lo que simplemente no hay dónde arrastrar (y eliminar) los widgets utilizados en la barra lateral.

Puedes inyectar otra cosa para llenar el vacío.

En este ejemplo, solo un usuario puede agregar / eliminar 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: la línea de cierre HTML; no puede tener ningún espacio en blanco antes o después

PS: esta sintaxis de Heredoc <<<HTML code HTML; impide que se muestre el código El PHP correctamente formateado aquí en WPSE. Pero el código está probado y funcionando.

    
respondido por el brasofilo 28.05.2012 - 22:29
2

El problema de eliminar widgets es más general, está causado por el desarrollador y el editor que usan la misma interfaz de backend. Problemas similares como eliminar widgets son - Insertar imágenes en el tamaño incorrecto - Añadir fuentes que no fueron diseñadas por el diseñador. - Creando más elementos de menú de los permitidos. .. y muchos más

La solución es simple, le da a los editores su propia interfaz. Y probablemente la mejor manera de hacerlo es: deje que esta interfaz se vea como el sitio web en sí. Este enfoque es lo que llamo "frontend CMS"

El frontend editor es un complemento gratuito que se puede usar para esto. Yo mismo escribí un complemento que lleva esta filosofía un poco más allá, frontendcms.com . Sin embargo, no es gratis.

    
respondido por el Carlo Roosen 18.10.2012 - 15:15

Lea otras preguntas en las etiquetas