Widget Logic

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ón
  • is_category(array(5,9,10,11)) — página de categoría de uno de los ID de categoría dados
  • is_single() && in_category('baked-goods') — un solo mensaje que está en la categoría con este slug
  • current_user_can('level_10') — widget sólo para administradores
  • strpos($_SERVER['HTTP_REFERER'], "google.com")!=false — widget para mostrar cuando se hace clic a través de una búsqueda en Google
  • is_category() && in_array($cat, get_term_children( 5, 'category')) — página de categoría descendiente de la categoría 5
  • global $post; return (in_array(77,get_post_ancestors($post))); — Página WP hija de la página 77
  • global $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.

¿Qué es esto en mi barra lateral cuando no hay widgets?

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 y is_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

11 de septiembre de 2024
It’s injecting code from third-party sites with football results, probably some betting stuff soon.Seems the plugin + domain was sold and the new owner is going to misuse it for his advantage.A huge problem gdpr-wise, not recommened to use, be aware
5 de septiembre de 2024
Comes with a football widget, but wether you use it or not, this plugin loads information from external services. Beware of using it, as this might become a privacy issue.
19 de agosto de 2024
Бал рабочий плагин до августа 2024. Теперь эта дрянь подключает к сайту еще какие то результаты футбольных матчей.
15 de agosto de 2024 3 respuestas
Widget Logic is a superb plugin, but had not been updated for years. So I am delighted that it has been brought up to date. Thanks for taking it over, it has been hugely useful to me for years and I had worried that it would just disappear one day.
17 de abril de 2020
This plugin is very useful, I recommend it I have been using this plugin for years and it is great.
Leer todas las 185 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

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