Hook llamado antes de guardar un widget de texto en WordPress

22 ene 2017, 04:44:17
Vistas: 1.41K
Votos: 0

Quiero saber qué hook/acción se llama justo antes de que el contenido y el título del Widget de Texto se almacenen en la base de datos. Busqué mucho en Google pero no pude encontrar el nombre del hook.

Lo que necesito es que cada vez que se presione el botón de guardar en un widget de texto (en el panel de administración), quiero aplicar mi función personalizada de modificación de contenido y devolver el contenido actualizado para que WordPress lo guarde.

Nota importante: Mi pregunta no es un duplicado de esta pregunta, porque trata sobre un filter y yo busco un hook o acción. Podría ser una solución pero no es la óptima en mi caso, ya que consumiría muchos recursos.
Ejemplo: Tengo 10 widgets de texto activos en mi sidebar y por cada visita a la página, para cada widget se llamaría a widget_text. Por eso busco una solución mejor.

Cualquier ayuda será muy apreciada.
Gracias.

1
Comentarios

grrr te quejas de la respuesta antes de que siquiera se diera :((. En general, si necesitas un comportamiento diferente, deberías escribir tu propio "widget de texto", ya que hay todo tipo de hooks que se activan cuando se guarda un widget, pero es poco probable que sean fáciles de usar.

Mark Kaplun Mark Kaplun
22 ene 2017 04:54:26
Todas las respuestas a la pregunta 1
0

No estoy seguro de lo que buscas aquí, quizás haya otras opciones disponibles, pero existe por ejemplo este hook:

/**
 * Filtra los ajustes de un widget antes de guardarlos.
 *
 * Devolver false evitará efectivamente que el widget pueda actualizar sus ajustes.
 *
 * @since 2.8.0
 *
 * @param array     $instance     Los ajustes actuales de la instancia del widget.
 * @param array     $new_instance Array de nuevos ajustes del widget.
 * @param array     $old_instance Array de ajustes antiguos del widget.
 * @param WP_Widget $this         La instancia actual del widget.
 */
 $instance = apply_filters( 
    'widget_update_callback', 
    $instance, 
    $new_instance, 
    $old_instance, 
    $this 
);

Aquí hay un ejemplo de cómo podemos dirigirnos a los widgets de Texto y modificar el campo de entrada text cuando se actualizan:

add_filter( 'widget_update_callback', function( $instance, $new, $old, $obj )
{
    if( 'text' === $obj->id_base && ! empty( $instance['text'] ) )
    {
        // Advertencia: esto sobrescribe el texto de entrada de la instancia del widget:
        // $instance['text'] = 'texto de reemplazo';
    }

    return $instance;
}, 10, 4 );
22 ene 2017 10:12:31