WooCommerce - filtrar por productos destacados en el área de administración

28 jun 2013, 01:56:45
Vistas: 19.7K
Votos: 2

WooCommerce tiene una forma sencilla de seleccionar productos "Destacados" haciendo clic en un pequeño icono de estrella en la columna "Destacado" en el área de administración.

Necesito poder filtrar y mostrar solo los productos destacados en el área de administración. ¿Alguien conoce una forma directa de hacer esto?

Investigué un poco y resulta que esto se hace con meta claves/valores, donde _featured es la clave y el valor es yes o no.

Desafortunadamente, como no se hace con taxonomías como las categorías de productos, no hay forma de usar la funcionalidad de filtro en el área de administración para mostrar solo productos destacados. Puedes ordenar la columna destacados para que estén todos en la parte superior o inferior de la lista de productos, pero eso es todo.

1
Comentarios

Encontré una solución aquí: https://stackoverflow.com/questions/46470206/woocommerce-filter-by-featured-products-in-admin Funciona con Wordpress 4.9.

Jordi Jordi
21 ene 2018 11:28:29
Todas las respuestas a la pregunta 3
9
13

Puedes ordenar tu lista de productos por el estado de destacados. Solo haz clic en la estrella en la parte superior de la columna... una vez colocará todos los elementos no destacados arriba, y dos veces debería invertir esto y poner todos los elementos destacados arriba.

La URL de tu administrador se verá así: /wp-admin/edit.php?post_type=product&orderby=featured&order=desc

Ordenar productos por estado de destacado

EDITADO:

Bien, resultó que no fue tan difícil filtrar por estado de destacado. WooCommerce filtra por "subtipo", y dado que también filtra por metadatos, podemos copiar en gran parte su código y hacer algunos ajustes.

La primera función agrega el elemento select/desplegable, mientras que la segunda maneja los ajustes a la consulta del administrador.

/**
 * Filtrar productos por tipo
 *
 * @access public
 * @return void
 */
function wpa104537_filter_products_by_featured_status() {

     global $typenow, $wp_query;

    if ($typenow=='product') :


        // Destacado/No Destacado
        $output .= "<select name='featured_status' id='dropdown_featured_status'>";
        $output .= '<option value="">'.__( 'Mostrar todos los estados de destacado', 'woocommerce' ).'</option>';

        $output .="<option value='featured' ";
        if ( isset( $_GET['featured_status'] ) ) $output .= selected('featured', $_GET['featured_status'], false);
        $output .=">".__( 'Destacado', 'woocommerce' )."</option>";

        $output .="<option value='normal' ";
        if ( isset( $_GET['featured_status'] ) ) $output .= selected('normal', $_GET['featured_status'], false);
        $output .=">".__( 'No Destacado', 'woocommerce' )."</option>";

        $output .="</select>";

        echo $output;
    endif;
}

add_action('restrict_manage_posts', 'wpa104537_filter_products_by_featured_status');

/**
 * Filtrar los productos en el administrador según las opciones
 *
 * @access public
 * @param mixed $query
 * @return void
 */
function wpa104537_featured_products_admin_filter_query( $query ) {
    global $typenow, $wp_query;

    if ( $typenow == 'product' ) {

        // Subtipos
        if ( ! empty( $_GET['featured_status'] ) ) {
            if ( $_GET['featured_status'] == 'featured' ) {
                $query->query_vars['meta_value']    = 'yes';
                $query->query_vars['meta_key']      = '_featured';
            } elseif ( $_GET['featured_status'] == 'normal' ) {
                $query->query_vars['meta_value']    = 'no';
                $query->query_vars['meta_key']      = '_featured';
            }
        }

    }

}

add_filter( 'parse_query', 'wpa104537_featured_products_admin_filter_query' );

Actualizado para WooCommerce 3.0

La devolución de llamada parse_query debe actualizarse ya que el estado de destacado ya no se almacena como metadatos de publicación.

/**
 * Filtrar los productos en el administrador según las opciones
 *
 * @access public
 * @param mixed $query
 * @return void
 */
function wpa104537_featured_products_admin_filter_query( $query ) {
    global $typenow;

    if ( $typenow == 'product' ) {

        // Subtipos
        if ( ! empty( $_GET['featured_status'] ) ) {
            if ( $_GET['featured_status'] == 'featured' ) {
                $query->query_vars['tax_query'][] = array(
                    'taxonomy' => 'product_visibility',
                    'field'    => 'slug',
                    'terms'    => 'featured',
                );
            } elseif ( $_GET['featured_status'] == 'normal' ) {
                $query->query_vars['tax_query'][] = array(
                    'taxonomy' => 'product_visibility',
                    'field'    => 'slug',
                    'terms'    => 'featured',
                    'operator' => 'NOT IN',
                );
            }
        }

    }

}
add_filter( 'parse_query', 'wpa104537_featured_products_admin_filter_query' );
28 jun 2013 03:58:22
Comentarios

Gracias. Como mencioné en la última oración de mi pregunta, soy consciente de esa función de ordenación. Sin embargo, quiero usar la función Ordenar Productos, que permite el ordenamiento arrastrando y soltando, para ordenar Productos Destacados, lo cual no es posible por defecto.

Puedes filtrar por categoría, luego hacer clic en "Ordenar Productos" y arrastrarlos al orden que desees. Quiero esto para productos destacados...

Gabriel Luethje Gabriel Luethje
28 jun 2013 22:04:29

Justo hoy estaba leyendo un artículo sobre cómo la gente no lee los artículos completos en la web, parece que me atrapaste. Mira mi edición.

helgatheviking helgatheviking
28 jun 2013 23:08:34

Parece que estaba encontrando mi solución mientras publicabas la tuya, y se ven similares. ¡Gracias!

Gabriel Luethje Gabriel Luethje
28 jun 2013 23:26:55

Sí, parece que estamos haciendo lo mismo. Un pequeño ajuste interesante... podría usarlo en mis propios sitios.

helgatheviking helgatheviking
28 jun 2013 23:48:01

En WordPress (4.7.5) y WooCommerce (3.0.7), tu código no funciona.

John Shang John Shang
26 may 2017 20:19:21

Bueno, tiene 4 años y WooCommerce sufrió una gran renovación con su lanzamiento 3.0. Lo he actualizado y parece funcionar.

helgatheviking helgatheviking
26 may 2017 23:21:33

¡Muchas gracias! Parte del código nuevo está afuera. Te sugiero que lo revises.

John Shang John Shang
27 may 2017 07:12:19

@helgatheviking ¡Eres increíble! Gracias por esto; funciona perfectamente en WP 4.8.3 y WC 3.1.2

chb chb
1 nov 2017 09:11:00

tu código original me ayudó a crear un filtro por valor meta. gracias.

dw1 dw1
19 jun 2019 17:34:14
Mostrar los 4 comentarios restantes
3

Encontré este plugin: https://wordpress.stackexchange.com/a/45447/15190, que pude personalizar para proporcionar una lista de selección para filtrar por Productos destacados. Con eso, puedo usar la función de arrastrar y soltar Ordenar productos de WooCommerce para cambiar fácilmente el orden en que aparecen los Productos destacados en el widget de Productos destacados y otros lugares.

Aquí está el código con mis personalizaciones que lo harán funcionar para los Productos destacados de WooCommerce:

<?php
/*
Plugin Name: Filtro de administración por Productos Destacados de WooCommerce
Plugin URI: http://en.bainternet.info
Description: adaptado de https://wordpress.stackexchange.com/q/45436/2487. Permite mostrar solo Productos destacados, lo que luego permite ordenar los Productos destacados arrastrando y soltando
Version: 1.0
Author: Bainternet
Author URI: http://en.bainternet.info
*/

add_action( 'restrict_manage_posts', 'wpse45436_admin_posts_filter_restrict_manage_posts' );
/**
 * Primero crea el menú desplegable
 * 
 * @author Ohad Raz
 * 
 * @return void
 */
function wpse45436_admin_posts_filter_restrict_manage_posts(){
    $type = 'post';
    if (isset($_GET['post_type'])) {
        $type = $_GET['post_type'];
    }

    //solo agregar filtro al tipo de publicación que deseas
    if ('product' == $type){
        //cambia esto a la lista de valores que deseas mostrar
        //en formato 'etiqueta' => 'valor'
        $values = array(
            'Mostrar solo Destacados' => 'Yes', 
            'Mostrar solo No Destacados' => 'No',
        );
        ?>
        <select name="Featured">
        <option value=""><?php _e('Mostrar Destacados y No Destacados', 'wpse45436'); ?></option>
        <?php
            $current_v = isset($_GET['Featured'])? $_GET['Featured']:'';
            foreach ($values as $label => $value) {
                printf
                    (
                        '<option value="%s"%s>%s</option>',
                        $value,
                        $value == $current_v? ' selected="selected"':'',
                        $label
                    );
                }
        ?>
        </select>
        <?php
    }
}

add_filter( 'parse_query', 'wpse45436_posts_filter' );
/**
 * si se envía, filtrar por metadatos de publicación
 * 
 * @author Ohad Raz
 * @param  (objeto wp_query) $query
 * 
 * @return Void
 */
function wpse45436_posts_filter( $query ){
    global $pagenow;
    $type = 'post';
    if (isset($_GET['post_type'])) {
        $type = $_GET['post_type'];
    }
    if ( 'product' == $type && is_admin() && $pagenow=='edit.php' && isset($_GET['Featured']) && $_GET['Featured'] != '') {
        $query->query_vars['meta_key'] = '_featured';
        $query->query_vars['meta_value'] = $_GET['Featured'];
    }
}
28 jun 2013 23:24:05
Comentarios

No olvides seleccionar una de nuestras respuestas como la respuesta oficial para sacar esto de la pila de 'preguntas sin responder'.

helgatheviking helgatheviking
30 jun 2013 17:17:29

En WordPress (4.7.5) y WooCommerce (3.0.7), tu código no funciona.

John Shang John Shang
26 may 2017 20:17:59

Código desactualizado, no funciona en WP 5 y WC 4.8. Añade un filtro de entrada encima de la lista de productos, pero no filtra.

D.A.H D.A.H
20 dic 2020 21:39:05
2

Puedes utilizar el plugin de WordPress Filter Featured Products for WooCommerce.

25 may 2021 20:41:30
Comentarios

Aunque no se ha actualizado en mucho tiempo, todavía funciona perfectamente. Gracias

Stephan Burlot Stephan Burlot
9 dic 2022 13:28:00

He actualizado el código de @helgatheviking para aquellos que no quieren un plugin. Pregúntame o vota, no puedo publicar porque no tengo suficiente reputación en esta comunidad

Stephan Burlot Stephan Burlot
9 dic 2022 13:34:02