Ocultar productos sin stock en Woocommerce

Cargador

Piedra
Usuario de Piedra
Mensajes
52
Puntuación de reacción
0
Buenas noches, estoy seguro que eso ya habrá pasado a muchos usuarios, resulta que en Woocommerce cuando ocultas los productos las páginas se desordenan debido a que ellas siguen contándolos.

Ejemplo:
Tengo 24 productos por página, en la cual hay 10 sin stock. Cuando uso la opción del plugin de ocultar resulta que solo se muestran 14 productos. Es decir los productos ocultos están invisibles pero siguen presentes en las páginas.

Una supuesta solución seria ir a Woocommerce > Estado del Sistema > Herramientas > Recontar términos y después Borrar transitorios. Eso lo he probado varias veces y no funciona.

El archivo que modifica esto es el siguiente:
"woocommerce/includes/wc-term-functions.php"

/**
460: * Function for recounting product terms, ignoring hidden products.
461: * @param array $terms
462: * @param string $taxonomy
463: * @param boolean $callback
464: * @param boolean $terms_are_term_taxonomy_ids
465: * @return void
466: */
467: function _wc_term_recount( $terms, $taxonomy, $callback = true, $terms_are_term_taxonomy_ids = true ) {
468: global $wpdb;
469:
470: // Standard callback
471: if ( $callback ) {
472: _update_post_term_count( $terms, $taxonomy );
473: }
474:
475: // Stock query
476: if ( get_option( 'woocommerce_hide_out_of_stock_items' ) == 'yes' ) {
477: $stock_join = "LEFT JOIN {$wpdb->postmeta} AS meta_stock ON posts.ID = meta_stock.post_id";
478: $stock_query = "
479: AND meta_stock.meta_key = '_stock_status'
480: AND meta_stock.meta_value = 'instock'
481: ";
482: } else {
483: $stock_query = $stock_join = '';
484: }
485:
486: // Main query
487: $count_query = "
488: SELECT COUNT( DISTINCT posts.ID ) FROM {$wpdb->posts} as posts
489: LEFT JOIN {$wpdb->postmeta} AS meta_visibility ON posts.ID = meta_visibility.post_id
490: LEFT JOIN {$wpdb->term_relationships} AS rel ON posts.ID=rel.object_ID
491: LEFT JOIN {$wpdb->term_taxonomy} AS tax USING( term_taxonomy_id )
492: LEFT JOIN {$wpdb->terms} AS term USING( term_id )
493: LEFT JOIN {$wpdb->postmeta} AS postmeta ON posts.ID = postmeta.post_id
494: $stock_join
495: WHERE post_status = 'publish'
496: AND post_type = 'product'
497: AND meta_visibility.meta_key = '_visibility'
498: AND meta_visibility.meta_value IN ( 'visible', 'catalog' )
499: $stock_query
500: ";
501:
502: // Pre-process term taxonomy ids
503: if ( ! $terms_are_term_taxonomy_ids ) {
504: // We passed in an array of TERMS in format id=>parent
505: $terms = array_filter( (array) array_keys( $terms ) );
506: } else {
507: // If we have term taxonomy IDs we need to get the term ID
508: $term_taxonomy_ids = $terms;
509: $terms = array();
510: foreach ( $term_taxonomy_ids as $term_taxonomy_id ) {
511: $term = get_term_by( 'term_taxonomy_id', $term_taxonomy_id, $taxonomy->name );
512: $terms[] = $term->term_id;
513: }
514: }
515:
516: // Exit if we have no terms to count
517: if ( ! $terms ) {
518: return;
519: }
520:
521: // Ancestors need counting
522: if ( is_taxonomy_hierarchical( $taxonomy->name ) ) {
523: foreach ( $terms as $term_id ) {
524: $terms = array_merge( $terms, get_ancestors( $term_id, $taxonomy->name ) );
525: }
526: }
527:
528: // Unique terms only
529: $terms = array_unique( $terms );
530:
531: // Count the terms
532: foreach ( $terms as $term_id ) {
533: $terms_to_count = array( absint( $term_id ) );
534:
535: if ( is_taxonomy_hierarchical( $taxonomy->name ) ) {
536: // We need to get the $term's hierarchy so we can count its children too
537: if ( ( $children = get_term_children( $term_id, $taxonomy->name ) ) && ! is_wp_error( $children ) ) {
538: $terms_to_count = array_unique( array_map( 'absint', array_merge( $terms_to_count, $children ) ) );
539: }
540: }
541:
542: // Generate term query
543: $term_query = 'AND term_id IN ( ' . implode( ',', $terms_to_count ) . ' )';
544:
545: // Get the count
546: $count = $wpdb->get_var( $count_query . $term_query );
547:
548: // Update the count
549: update_woocommerce_term_meta( $term_id, 'product_count_' . $taxonomy->name, absint( $count ) );
550: }
551:
552: delete_transient( 'wc_term_counts' );
553: }

Alguien podría ayudarme? No encuentro solución alguna ni en inglés y menos en español. Gracias a todos.
 
Arriba