Descripción
This plugin gives every widget an extra control field called «Widget logic» that lets you control the pages that the widget will appear on. The text field lets you use WP’s Conditional Tags, or any general PHP code.
PLEASE NOTE The widget logic you introduce is EVAL’d directly. Anyone who has access to edit widget appearance will have the right to add any code, including malicious and possibly destructive functions. There is an optional filter ‘widget_logic_eval_override’ which you can use to bypass the EVAL with your own code if needed. (See Other Notes).
La configuración y las opciones se encuentran en la interfaz de administración de widgets habitual.
GRAN ACTUALIZACIÓN:
-
Ahora puedes controlar el widget tanto en el editor de widgets de Gutenberg como en el editor clásico. Es tan fácil como antes, pero también en la vista de Gutenberg.
-
Pre-installed widgets let you add special widget with one click of the mouse. First pre-installed widget is Live Match that let you add widget of one random live football game with real time score updates (teams logos, livescore, minute of the match, tournament name). And more interesting widgets to come!
Configuración
Aside from logic against your widgets, there are three options added to the foot of the widget admin page (see screenshots).
-
Use ‘wp_reset_query’ fix — Many features of WP, as well as the many themes and plugins out there, can mess with the conditional tags, such that is_home is NOT true on the home page. This can often be fixed with a quick wp_reset_query() statement just before the widgets are called, and this option puts that in for you rather than having to resort to code editing
-
Load logic — This option allows you to set the point in the page load at which your widget logic if first checked. Pre v.50 it was when the ‘wp_head’ trigger happened, ie during the creation of the HTML’s HEAD block. Many themes didn’t call wp_head, which was a problem. From v.50 it happens, by default, as early as possible, which is as soon as the plugin loads. You can now specify these ‘late load’ points (in chronological order):
- after the theme loads (after_setup_theme trigger)
- when all PHP loaded (wp_loaded trigger)
- after query variables set (parse_query) – this is the default
- during page header (wp_head trigger)
Puede que necesite retrasar la carga si su lógica depende de funciones definidas, por ejemplo, en el archivo functions.php del tema. Por el contrario, es posible que desee la carga temprana para que el recuento de widgets se calcula correctamente, por ejemplo, para mostrar un diseño alternativo o contenido cuando una barra lateral no tiene widgets.
-
Don’t cache widget logic results — From v .58 the widget logic code should only execute once, but that might cause unexpected results with some themes, so this option is here to turn that behaviour off. (The truth/false of the code will be evaluated every time the sidebars_widgets filter is called.
Interacción con los servicios externos
Widget Logic utiliza el servicio externo para obtener información actualizada sobre los resultados de los partidos de fútbol. widgetlogic.org es una fuente de información deportiva, que proporciona una amplia gama de información sobre fútbol, incluyendo diversas ligas, torneos y campeonatos de todo el mundo.
El funcionamiento del servicio widgetlogic.org se basa en ofrecer datos en tiempo real acerca de los partidos seleccionados sin necesidad de actualizar la página. Esto significa que los datos se actualizan automáticamente sin necesidad de recargar la página. Este enfoque garantiza a los usuarios un acceso rápido e ininterrumpido a los últimos datos deportivos sin el esfuerzo de actualizar manualmente la información, lo que les permite mantenerse informados sobre los acontecimientos en curso en tiempo real.
Writing Logic Code
El texto del campo «Widget logic» puede ser código PHP completo y debe devolver «verdadero» cuando necesites que aparezca el widget. Si no hay ningún «retorno» en el texto, se añade un «retorno» implícito al principio y un «;» al final. (Esto es sólo para hacer más convenientes las sentencias simples como is_home()).
Los básicos
Haz un buen uso de WP’s own conditional tags. Puede variar y combinar el código utilizando:
!
(NO) para invertir la lógica, eg!is_home()
es VERDADERO cuando NO es la página de inicio.||
(O) para combinar condiciones.X ó Y
es VERDADERO cuando X es verdadero o Y es verdadero.&&
(Y) para crear condiciones más específicas.X y Y
es VERDADERO cuando X es verdadero o Y es verdadero.
Hay un montón de buenos ejemplos de código en los foros de WP, y en sitios de WP en toda la red. Pero el Codex WP también está lleno de buenos ejemplos para adaptar, tales como Comprueba si la entrada está en una categoría descendente.
Ejemplos
is_home()
— sólo la página principal del blog!is_page('about')
— en todas partes EXCEPTO en esta «página» específica de WP!is_user_logged_in()
— se muestra cuando un usuario no ha iniciado sesiónis_category(array(5,9,10,11))
— página de categoría de uno de los ID de categoría dadosis_single() && in_category('baked-goods')
— un solo mensaje que está en la categoría con este slugcurrent_user_can('level_10')
— widget sólo para administradoresstrpos($_SERVER['HTTP_REFERER'], "google.com")!=false
— widget para mostrar cuando se hace clic a través de una búsqueda en Googleis_category() && in_array($cat, get_term_children( 5, 'category'))
— página de categoría descendiente de la categoría 5global $post; return (in_array(77,get_post_ancestors($post)));
— Página WP hija de la página 77global $post; return (is_page('home') || ($post->post_parent=="13"));
— página de inicio O la página hija de la página 13
Observa el «;» adicional al final, donde hay un «retorno» explícito.
The ‘widget_logic_eval_override’ filter
Before the Widget Logic code is evaluated for each widget, the text of the Widget Logic code is passed through this filter. If the filter returns a BOOLEAN result, this is used instead to determine if the widget is visible. Return TRUE for visible.
Capturas
El campo ‘Widget logic’ en funcionamiento en los widgets de Gutenberg. El campo ‘Widget logic’ en funcionamiento en los widgets clásicos. The plugin options are at the foot of the usual widget admin page… wp_reset_query
option, ‘load logic point’ and ‘evaluate more than once’. You can also export and import your site’s WL options as a plain text file for a quick backup/restore and to help troubleshoot issues.Pre-installed ‘Live Match’ widget in widgets section Pre-installed ‘Live Match’ widget on website
FAQ
-
¿Puedo utilizar Widget Logic en la vista de widgets de Gutenberg?
-
¡Sí, puedes! Empezando desde 6.0.0 puedes usar Widget Logic en los widgets de Gutenberg y en los widgets clásicos. Así que si tienes una versión anterior, por favor actualiza el plugin.
-
¿Qué puedo intentar si no funciona?
-
- Switch to the default theme. If the problem goes away, your theme may be interfering with the WP conditional tags or how widgets work
- Try the
wp_reset_query
option. If your theme performs custom queries before calling the dynamic sidebar this might help. - Try a different ‘Load logic’ point. Most wordpress conditional tags only work ‘after query variables set’, but some plugins may require evaluation earlier or later.
- The ‘Evaluate widget logic more than once’ option may be needed if you have to use an early ‘Load logic’ point.
-
I’m getting errors that read like «PHP Parse error… … eval()’d code on line 1»
-
You have a PHP syntax error in one of your widget’s Widget Logic fields. Review them for errors. You might find it easiest to check by using ‘Export options’ and reading the code there (Though be aware that single and double quotes are escaped with multiple backslash characters.)
Si tienes problemas para encontrar el error de sintaxis, un método sencillo de diagnóstico es utilizar «Opciones de exportación» para guardar una copia y luego dejar en blanco cada campo de Widget Logic sucesivamente hasta que desaparezca el problema. Una vez que haya identificado el código problemático, puedes restaurar el resto con «Opciones de importación».
-
Está causando problemas con Woo Commerce / otro plugin popular
-
A menudo, aunque no siempre, esto se soluciona probando las diferentes opciones de ‘Cargar lógica’. La opción ‘ tras establecer las variables de consulta’ parece que podría ser una mejor opción por defecto, pruébala.
-
Since v .50 the widget logic code runs such that when dynamic_sidebar is called in a theme’s code it will ‘return false’ if no widgets are present. In such cases many themes are coded to put in some default sidebar text in place of widgets, which is what you are seeing.
Your options, if you want this default sidebar content gone, are to either edit the theme, or as a work around, add an empty text widget (no title, no content) to the end of the sidebar’s widget list.
-
¿Cómo puedo poner el widget X sólo en mi página de inicio? (O en todas las páginas excepto en esa).
-
There is some confusion between the Main Page and the front page. If you want a widget on your ‘front page’ whether that is a static page or a set of posts, use is_front_page(). If it is a page using is_page(x) does not work. If your ‘front page’ is a page and not a series of posts, you can still use is_home() to get widgets on that main posts page (as defined in Admin > Settings > Reading).
-
Logic using is_page() doesn’t work
-
Creo que esto se ha corregido en la versión 5.7.0. Avísame si no es el caso.
If your theme calls the sidebar after the loop you should find that the wp_reset_query option fixes things. This problem is explained on the is_page codex page.
-
¿Cómo consigo que un widget aparezca tanto en la página de una categoría como en las entradas individuales de esa categoría?
-
Cuidado con las etiquetas condicionales. Hay una etiqueta
in_category
yis_category
. Uno se utiliza para saber si la entrada «actual» está EN una categoría, y el otro se utiliza para saber si la página que se muestra ES de esa categoría (lo mismo ocurre con las etiquetas, etc.). Lo que quieres es el caso cuando:(this page IS category X) OR (this is a single post AND this post is IN category X)
que en PHP correcto es:
is_category(X) || (is_single() && in_category(X))
-
¿Cómo consigo que un widget aparezca cuando X, Y y Z?
-
Pruébala tú primero. Consulta la sección «Escribir código lógico» enOtras Notas.
-
¿Por qué Widget Logic es tan poco amigable, tienes que ser un demonio del código para usarlo?
-
Esto es algo deliberado. Originalmente lo escribí para ser lo más flexible posible con la idea de escribir una interfaz de usuario de arrastrar y soltar en algún momento. Nunca llegué a hacerlo, porque (soy perezoso y) no podía hacer que se viera bien y te permitiera volver a «código puro» (para las posibilidades más difíciles de atender en una interfaz de usuario).
El plugin Widget Context presenta una interfaz de usuario agradable y también tiene una función de «concordancia de URL».
-
Los widgets aparecen cuando no deberían
-
Puede ser que tu tema realice consultas personalizadas antes de llamar a la barra lateral. Prueba con la opción
wp_reset_query
.Otra posibilidad es que no has definido tu lógica con suficiente precisión. Por ejemplo, cuando se procesa la barra lateral, in_category(«queso») será verdadero si la última entrada de una página de archivo pertenece a la categoría «queso».
Tighten up your definitions with PHPs ‘logical AND’ &&, for example:
is_single() && in_category('cheese')
Reseñas
Colaboradores y desarrolladores
«Widget Logic» es un software de código abierto. Las siguientes personas han colaborado con este plugin.
Colaboradores«Widget Logic» está traducido en 19 idiomas. Gracias a los traductores por sus contribuciones.
Traduce «Widget Logic» a tu idioma.
¿Interesado en el desarrollo?
Revisa el código , echa un vistazo al repositorio SVN o suscríbete al registro de desarrollo por RSS.
Registro de cambios
6.0.5
- fixed Live Match widget block
6.0.4
- load of External Services only when Live Match widget used
6.0.3
- added settings option for enable new functionality
6.0.2
- fixed bug for php7.2
6.0.1
- Corrección de fallos
6.0.0
- Añadido el editor de widgets Gutenberg
- Pre-installed widgets added (Live Match)
- Corrección de fallos
- Depuración del código
5.10.4
- Actualización de seguridad. La característica de exportación se ha protegido con nonce.
5.10.3
- Security update. Huge thanks to the Plugin Vulnerabilities Team!
5.10.2
- The plugin’s security has been improved, big thanks to Paul Dannewitz for his excellent security audit!
- The widget_content filter option has been removed from the settings block, but kept in the code for backward compatibility. The plan is to remove it completely and make the plugin simpler (let us know what you think).
- Depuración del código.
5.9.0
wp_reset_query works better under certain conditions.
5.8.2
The code has been adapted to work on the servers with restricted <?=
Fixed support for the wp_register_sidebar_widget widgets.
Algunos contenidos se prepararon para su traducción.
5.8.1
Se ha corregido el problema de visualización de errores en determinadas condiciones.
5.8.0
Added full support for WP customizer.
En caso de error fatal en la lógica, el widget no se mostrará.
5.7.4
Fixed the «Warning: Attempt to assign property of non-object» bug.
https://wordpress.org/support/topic/latest-update-seems-break-my-installation/
5.7.3
Fixed the issue when in some cases the plugin displayed user logic errors in the Widgets section and this didn’t allow to save the widgets.
https://wordpress.org/support/topic/an-error-has-occurred-please-reload-the-page-and-try-again-3/
Fixed ini_set() related warnings for some rare hosting configurations.
https://wordpress.org/support/topic/ini_set-diabled-warning/
5.7.2
Eliminados los conflictos con versiones obsoletas de WP.
5.7.1
Corregido el formulario de ajustes en los que no se guardaron los ajustes en algunas circunstancias.
Se ha añadido un conjunto para mostrar errores de código lógico a los administradores (desactivada por defecto).
Corregido el problema con las citas en los mensajes de error en algunas instalaciones de WP.
5.7.0
Corregido el problema de compatibilidad con PHP 7.
Corregido un conflicto con el último plugin WPML.
Un nuevo punto de lógica de carga por defecto unido a la acción «parse_query». Por defecto, la lógica del widget solo se evalúa una vez.
Traducción añadida: Ucraniano por Roman Sulym
0.57
Small fixes to satisfy some define(‘WP_DEBUG’, true) errors
0.56
Pequeña corrección a la corrección original de WP3.5 en 0.54 que tenía el efecto secundario de no guardar el texto lógico en los widgets recién añadidos.
0.55
Restaurado un striplashes que desapareció en 0.54 causando mucho dolor.
Traducción: Español por Eduardo Larequi https://wordpress.org/support/profile/elarequi
0.54
Se ha eliminado una llamada a una función de WP 3.1+, con la esperanza de que vuelva a ser compatible con 2.8.
A little ‘trim’ of WL code to stop «syntax error, unexpected ‘)’» errors, which could occur if your WL was just a single space. Thanks to https://twitter.com/chrisjean for pointing this out.
Translation support! Thanks to Foe Services Labs https://wordpress.org/support/profile/cfoellmann for the work on this and the German Social Translation
Added a ‘widget_logic_eval_override’ filter. This allows advanced users to bypass EVAL with a function of their own.
0.53
Código liberado accidentalmente con un terrible fallo 🙁
0.52
Dos nuevas características: carga retardada opcional de la lógica (mira la Configuración en Installation), y la posibilidad de guardar y volver a cargar toda la lógica de widgets de su sitio en un archivo de configuración.
0.51
Corrección de un fallo importante (bastante importante y bastante estúpido por mi parte)
0.50
Por primera vez desde que esto empezó en WP 2.3, he reescrito cómo funciona el núcleo de la lógica del widget, así que puede haber ‘baches por delante’.
It now uses the ‘sidebars_widgets’ filter (as it should have done when that was
introduced in WP2.8 by the look of it). The upshot is that is_active_sidebar should behave properly.
Widget callbacks only get intercepted if the ‘widget_content’ filter is activated, and much more briefly. (A widget’s ‘callback’ is rewired within the ‘dynamic_sidebar’ function just before the widget is called, by the ‘dynamic_sidebar_param’ filter, and is restored when the callback function is invoked.)
0.48
Elimina algunas malas prácticas de codificación que lanzan avisos de depuración – gracias a John James Jacoby.
0.47
FINALLY tracked down the elusive ‘wp_reset_query’ option resetting bug.
0.46
Fix to work with new WP2.8 admin ajax. With bonus fixes.
0.44
Ahora funciona oficialmente con 2.7. Cambios en la documentación y correcciones de fallos menores.
0.43
simple bug fix (form data was being lost when ‘Cancel’ing widgets)
0.42
WP 2.5+ solo ahora. WP’s widget admin ha cambiado mucho y me estaba haciendo un lío intentando hacerlo funcionar con ambos.
0.4
Trae compatibilidad con WP 2.5. Estoy tratando de hacerlo compatible de nuevo. Si tienes problemas usando WL con WP 2.1–2.3 avísame sobre el problema. Gracias a Kjetil Flekkoy por informar y ayudar a diagnosticar errores en esta versión
0.31
Última versión WP 2.3 solamente