Modificar el contenido de cualquier widget de WordPress

No entiendo por qué no hay un filter o un action cuando se trata de los contenidos de los widgets. A no ser que el autor los haya metido, no hay forma de modificar ni el form del widget ni su contenido.


Me he encontrado en la necesidad de tener que indicar en el footer el tamaño de columnas de Bootstrap para cada uno de los widgets de un sidebar, para lo cual es necesario modificar la salida de cada widget e incluir en el form un campo que indique el ancho y en el html del widget el código de Bootstrap para indicar el ancho de la columna.

En el function.php meteremos el siguiente código, modificaremos los datos del widget para que añada el nuevo campo que vamos a meter (widget_bootstrap_columns), milagrosamente sí hay un filtro para ello:

[// Modificamos los datos enviados al guardar el widget add_filter( 'widget_update_callback', 'sw_widget_update'); function sw_widget_update($instance, $new_instance, $old_instance, $obj ) { if (isset($_POST['widget_bootstrap_columns'])) $instance['widget_bootstrap_columns'] = $_POST['widget_bootstrap_columns']; return $instance; }]

Después vamos a modificar la variable global $wp_registered_widgets que contiene la llamada a la función widget del widget (la que escribe el HTML). Encapsularemos esta llamada dentro de una función anónima para realizar las tareas que sean necesarias, en mi caso dibujar un div con el class col-sm-N:

[// Modifico el display del widget para meterle el código de bootstrap add_action('dynamic_sidebar_before', 'sw_modify_widgets_display', 10, 2); function sw_modify_widgets_display($index, $bool) { global $wp_registered_widgets; $sidebars_widgets = wp_get_sidebars_widgets(); foreach ( (array) $sidebars_widgets[$index] as $id ) { if ( !isset($wp_registered_widgets[$id]) ) continue; $wp_registered_widgets[$id]['_callback'] = $wp_registered_widgets[$id]['callback']; $wp_registered_widgets[$id]['callback'] = function($args, $widget_args) use ($id) { global $wp_registered_widgets; // Recuperamos los datos del widget $instance = get_option($wp_registered_widgets[$id]['_callback'][0]->option_name); $bootstrap = isset($instance[$wp_registered_widgets[$id]['_callback'][0]->number]['widget_bootstrap_columns'])? $instance[$wp_registered_widgets[$id]['_callback'][0]->number]['widget_bootstrap_columns'] : false; // Pintamos el tamaño de la columna si así procede if ($bootstrap) echo ' '; call_user_func_array($wp_registered_widgets[$id]['_callback'], array($args, $widget_args)); if ($bootstrap) echo ' '; }; } }]

Y por último haremos lo mismo para el formulario, modificar la variable global $wp_registered_widget_controls para encapsular la función form del widget y dibujar antes un input donde almacenemos el valor de widget_bootstrap_columns:

[// Modifica el form de los widgets add_action( 'load-widgets.php', 'sw_modificar_widgets_forms' ); function sw_modificar_widgets_forms() { global $wp_registered_widget_controls; foreach($wp_registered_widget_controls as $id=>$widget) { $wp_registered_widget_controls[$id]['_callback'] = $wp_registered_widget_controls[$id]['callback']; $wp_registered_widget_controls[$id]['callback'] = function($data) use ($id) { global $wp_registered_widget_controls; // Recuperamos los datos del widget para incluir el valor de widget_bootstrap_columns $instance = get_option($wp_registered_widget_controls[$id]['_callback'][0]->option_name); $widget_bootstrap_columns = isset($instance[$data['number']]) && isset($instance[$data['number']]['widget_bootstrap_columns'])? $instance[$data['number']]['widget_bootstrap_columns']:''; echo '<div class="widget_added"><p>Número de columnas (col-sm-<input type="number" name="widget_bootstrap_columns" min="1" max="12" value="'.$widget_bootstrap_columns.'" />)</p><hr /></div>'; call_user_func_array($wp_registered_widget_controls[$id]['_callback'], array($data)); }; } }]

¿Qué te pareció?

Nombre

Adblock Adobe Flash AJAX Algoritmos Anuncios API Blogger Blogging Buscadores chrome web store Código Fuente CSS CSS 3 CV Dart Depurar Desarrollo Web Diseño Diseño Grafico Diseño Web Documentación Efectos Facebook Firefox Foros Fotografias Frances Bean Cobain Gadgets General Geolocalizar Google Google Analytics Google Chrome Google Imágenes Google Music Google Reader Google+ Herramientas Hotmail HTML HTML5 Imágenes Información Informática Instagram Internet Internet Explorer Internet Explorer 10 Javascript jQuery Kurt Cobain Librerías Marketing Microsoft Monetización Web Mozilla Firefox 8 MySQL Navegadores Noticias Optimización Web PageSpeed Insights PayPal Personal Photoshop PHP Plantillas Programación Programas Programas Web Proyectos Redes Sociales ScreensHots Scripts Seguridad SEO Servicios Web Sesiones Snippets SoniTube Spam Steve Jobs Templates Themes Thumbalizr Tips Trucos Tutoriales Twitter Utilidades Vectores Virus Web Widgets Windows 7 Windows 8 Windows Mobile Windows XP WordPress XSS Youtube
false
ltr
item
OnSoni: Modificar el contenido de cualquier widget de WordPress
Modificar el contenido de cualquier widget de WordPress
https://1.bp.blogspot.com/-fZrAxTMktTU/V_8BL12mzKI/AAAAAAAAIDM/v0eNCldyxJk8XIRSif73cHA_eug2pZM2ACLcB/s400/modificar-contenidos-widgets-wordpress-onsoni.jpg
https://1.bp.blogspot.com/-fZrAxTMktTU/V_8BL12mzKI/AAAAAAAAIDM/v0eNCldyxJk8XIRSif73cHA_eug2pZM2ACLcB/s72-c/modificar-contenidos-widgets-wordpress-onsoni.jpg
OnSoni
http://www.onsoni.com/2016/10/modificar-el-contenido-de-cualquier.html
http://www.onsoni.com/
http://www.onsoni.com/
http://www.onsoni.com/2016/10/modificar-el-contenido-de-cualquier.html
true
8818836675902573334
UTF-8
Not found any posts Not found any related posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU Etiqueta ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Contents Ver también Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS CONTENT IS PREMIUM Please share to unlock Copiar todo el codigo Seleccionar todo el Código Todo el código se ha copiado en el portapapeles Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy