jeff
Estoy tratando de filtrar TODOS los resultados del widget a través de un filtro simple, pero no puedo encontrar ningún gancho y esperaba que me apuntaran en la dirección correcta. ¿O posiblemente mis esfuerzos ni siquiera son posibles?
Mi filtro simple es algo como esto:
function clean_widget_output( $input ) {
return str_replace( array( "\t", "\n", "\r" ), '', $input );
}
add_[FILTER OR ACTION]( 'need_a_hook', 'clean_widget_output', 99 );
¿Algunas ideas? Soy bastante nuevo en PHP, pero puedo moverme.
Esto nació de la necesidad/deseo de limpiar el horrible HTML arrojado por los widgets de WordPress. Me encanta lo que hacen, pero algunos de los resultados me hacen llorar.
La respuesta corta es output buffering
porque no pude encontrar ningún widget o gancho de barra lateral.
La respuesta larga es:
function tidy_sidebar( $sidebar_name_or_id )
{
ob_start();
$bool = dynamic_sidebar( $sidebar_name_or_id);
if ( $bool )
{
$str = ob_get_contents();
$str="do cleanup stuff...";
}
else
{
$str="";
}
ob_end_clean();
return $str;
}
Luego llame echo tidy_sidebar( 'sidebar-name-or-id' );
de tu tema.
-
Ahora puede controlar el envoltorio del widget y el html del título del widget al registrar una barra lateral, por lo que no está seguro de cuánto se necesita. Si no le gusta un widget, es mejor reescribirlo con el resultado que desee. Eche un vistazo a la API de widgets (codex.wordpress.org/Widgets_API) y la función register_sidebar (codex.wordpress.org/Function_Reference/register_sidebar)
– roborourke
3 de noviembre de 2010 a las 13:36
andres patton
Tuve un problema similar y después de revisar Adam Brown’s lista de todos los ganchos de filtro de WordPressdescubrí que el gancho que necesitaba existe (widget_title
, como menciona pxl), pero que no hay un gancho para obtener todos los resultados del widget. Pensé en elaborar la solución que funcionó para mí.
Teóricamente, el widget_title
hook debería afectar a todos los widgets de su blog, pero estoy seguro de que algunos widgets de terceros no incluyen la línea de código necesaria para aplicar los filtros de título, por lo que no es infalible. Sin embargo, funcionó para mí y se puede usar para aplicar ‘código corto’ personalizado (más exactamente, en este caso, ‘código largo’) o sintaxis a los títulos de sus widgets. Por ejemplo, de vez en cuando quería incluir código html en los títulos de mis widgets, pero de forma predeterminada, se elimina todo el html. Entonces, para poder agregar cosas como <em>
etiquetas a texto en algunos de mis títulos, elegí una sintaxis personalizada: [[
instead of <
& ]]
en vez de >
(por ejemplo, [[em]]
y [[/em]]
) y luego creé una función en el archivo functions.php de mi tema para procesar esa sintaxis personalizada y reemplazarla con el equivalente html:
function parse_html_widget_title( $text ) {
return str_replace(array('[[', ']]'), array('<', '>'), $text);
}
Luego agregué una línea debajo para agregar la función como filtro:
add_filter('widget_title', 'parse_html_widget_title', 11); // 11 is one above the default priority of 10, meaning it will occur after any other default widget_title filters
los add_filter
/ apply_filter
La funcionalidad pasa automáticamente el contenido que se filtra como el primer parámetro a la función especificada como filtro, así que eso es todo lo que necesita hacer.
Para hacer algo similar para la salida principal del widget, necesitaría mirar todos sus widgets para ver qué gancho usan y verificar que tengan un filtro para su salida principal, que usar add_filter()
para cada enlace que encuentre con su función de devolución de llamada personalizada (por ejemplo, es widget_text
para la salida del widget de texto, o get_search_form
para el formulario de búsqueda [you can see it in wp-includes/general-template.php, at the get_search_form()
function]). El problema es que algunos de los widgets generados dinámicamente no tienen ganchos (como el widget Meta), por lo que la solución de almacenamiento en búfer de salida que proporciona Jeff es la solución más versátil, aunque no la ideal.
-
¡¡GRACIAS!! He buscado algo como esto durante mucho tiempo: eres un salvavidas. 🙂
– michelle
4 mayo 2011 a las 19:56
hay muchos ganchos para widgets de wordpress que no están documentados. El códice de wordpress no los incluye, por la razón que sea (por ejemplo, estos ganchos pueden cambiar en el futuro y se romperán inesperadamente con nuevas actualizaciones y versiones)… así que utilícelos con extrema precaución.
para averiguar cuáles son, hay al menos 2 lugares para buscar:
<wordpress install directory>/wp-includes/default-filters.php
<wordpress install directory>/wp-includes/default-widgets.php
contenido en esos dos archivos es una lista bastante buena de todos los ganchos que usa wordpress.
Un ejemplo sería un filtro para widgets es widget_title
nuevamente, utilícelos con precaución, no se garantiza que funcionen más allá de la versión específica del código que está viendo.
No estoy seguro de cuándo introdujeron el filtro widget_text, tal vez no lo tenían en 2009 cuando se hizo esta pregunta originalmente, pero como está allí ahora, y por el bien de cualquiera que obtenga este desbordamiento de pila como yo lo hice de google y simplemente lee lo suficiente para ver esta respuesta, ahora es bastante simple:
function my_widget_filter( $content )
{
// manipulate $content as you see fit
return $content;
}
add_filter( 'widget_text', 'my_widget_filter', 99 );
También tal vez echa un vistazo a la filtro dynamic_sidebar_params —
No estoy seguro de cuándo introdujeron el filtro widget_text, tal vez no lo tenían en 2009 cuando originalmente se hizo esta pregunta. Consulte mi código de muestra a continuación en mi respuesta para obtener un ejemplo de trabajo completo (y muy simple).
– Desarrollador nulo
30/03/2014 a las 21:43