¿Se puede usar add_filter() dentro de otra función?

7 feb 2012, 15:38:10
Vistas: 13.2K
Votos: 2

Soy nuevo en WordPress y actualmente estoy desarrollando mi primer plugin y tengo dificultades.

¿Cómo puedo insertar la acción add_filter dentro de mi función de envío? Quiero que la acción add_filter se procese después de que el usuario haga clic en el botón de enviar.

He intentado esto pero no funcionó.

if(isset($_POST['btn_submit'])) {

    function addContent($content = '') {            
        $content .= "Mi contenido";

        return $content;
    }

    add_filter('the_content', 'addContent');
}

¡Cualquier ayuda sería muy apreciada. Gracias!

1
Comentarios

Si has resuelto este problema (como se menciona en los comentarios a continuación), por favor publica tu solución como una respuesta para los demás.

EAMann EAMann
7 feb 2012 17:26:35
Todas las respuestas a la pregunta 3
3

Creo que lo que REALMENTE estás buscando hacer es apply_filters(). add_filter() registra un nuevo filtro, mientras que apply_filters() ejecuta los filtros que han sido registrados.

Si eso no es lo que estás buscando hacer, entonces debes ser consciente de que add_filter() necesita ejecutarse cada vez que quieras que se aplique el filtro. Esto permite que los plugins se eliminen sin tener que anular el registro de todos sus filtros y, en general, mantiene una instalación de WordPress bastante limpia... también ayuda con la seguridad. Una mejor pregunta podría abarcar un alcance más amplio, donde indiques lo que estás intentando hacer, en lugar de que intentemos solucionar tu implementación del mismo.

7 feb 2012 15:46:27
Comentarios

Quiero agregar contenido al final de cada publicación de mi sitio, y add_filter lo hizo, pero la acción add_filter() solo se procesa cuando el plugin está activado, pero ¿qué pasa si quiero que se procese después de hacer clic en el botón de enviar? ¿Funcionará apply_filters()? Ya leí la documentación sobre apply_filters() y no encontré la solución a mi pregunta.

ronniel ronniel
7 feb 2012 16:15:27

Solo quiero decir que ya resolví esto. Separé la función addContent de la función submit y puse una línea de código dentro de la función submit que llama a la función para agregar contenido.

algo como esto:

`function addContent($content = '') { $content .= "Mi contenido"; return $content; }

add_filter('the_content', 'addContent');

if(isset($_POST['btn_submit'])) { $content .= addContent(); }`

esto funciona para mí.. muchas gracias.

ronniel ronniel
7 feb 2012 16:31:14

Si quieres que solo aparezca una vez que se ha hecho clic en un botón y luego desaparezca en el próximo cambio de página (una vez que los datos del post se han ido), entonces lo que estás haciendo es un método apropiado. Si deseas cambiar el comportamiento permanentemente cuando se hace clic en el botón, necesitarás almacenar la opción en la base de datos.

mor7ifer mor7ifer
7 feb 2012 16:31:22
0

También puedes escribir de la siguiente manera:

    function addContent($content = '') {    
     $content .= "Mi contenido";    
     return $content; 
    }

   if(isset($_POST['btn_submit'])) {
    add_filter('the_content', 'addContent'); }
7 feb 2012 17:38:55
0

@Shaon, Gracias por tu respuesta. No pude hacer que eso funcionara efectivamente, pero aquí hay una función muy viable que encontré: http://core.trac.wordpress.org/ticket/15311#comment:13

28 mar 2012 03:23:13