Archivo de la etiqueta: functions

WordPress y Woocommerce, problema mostrando medios y productos con variaciones

Sígueme

lesterfibla

Desarrollador Web y Programador at www.lesterfibla.com/pro
Desarrollador y Programador Web de día, VDJ por las noches. Amante de la música, los deportes y los medios de comunicación.
Sígueme

He estado los últimos días trabajando en una nueva tienda online (OutdoorFeat.cl), sobre WordPress y Woocommerce, y todo iba perfecto: Hice un theme completamente a la medida, intentando usar solo los plugins externos absolutamente necesarios e intentando programar la mayor parte yo mismo.

Todo iba bien. Funcionaba perfecto.

Claro, hasta que apareció un «pero» :(

De un momento a otro (eso creí al menos) en la biblioteca de medios solo me mostraba algunos productos, no todos. Si buscaba algún producto si aparecía, y de todos modos siempre las fotos aparecían sin problemas en el front del sitio. Era solo visibilidad en el dashboard.

Luego, probando hacer un producto con variaciones en woocommerce, se creaban 18 variaciones, pero por algún motivo no se mostraban todas. Solo veía 2 página de 4 variaciones cada una. Faltaban 10 !!!!

Googleé y googleé y solo llegué a algunas preguntas similares cuyo problema era de recursos de servidor. Memoria y tiempos de ejecución. Aumenté ambos por si acaso y nada. igualé otros parámetros a otra tienda online de similares características y nada. Seguía fallando.

En un momento de iluminación, encontré el error. El error fui yo mismo (¿y cuándo no?).

Necesitaba limitar la cantidad de posts a mostrar en el sitio, en las categorías con listados de productos, en los resultados de búsqueda, etc. Así es que hice una función para cambiar el parámetro posts_per_page por defecto:


function limita_posts_default( $query ){
    $query->set('posts_per_page', 4);
    return $query;
}
add_filter('pre_get_posts', 'limita_posts_default');

Y eso era.

Resulta que ese cambio afectaba a todas las queries, y en este caso, aplicaba también al listado de medios en la biblioteca de medios y al listado de variaciones de productos.

Obviamente creo que sería una muy buena idea que los amigos de wordpress separaran algunas cosas entre front y dashboard, pero bueno, es lo que hay.

La solución fue aplicar el límite solo en los casos que fuera necesitando, por ejemplo para el caso de las búsquedas:


function limita_posts_default( $query ){
    if( is_search() ){
        $query->set('posts_per_page', 4);
    }
    return $query;
}
add_filter('pre_get_posts', 'limita_posts_default');

Ojalá a alguien le sirva cuando ande tan perdido como yo andaba,