WooCommerce - Filtrare i prodotti in evidenza nell'area di amministrazione

28 giu 2013, 01:56:45
Visualizzazioni: 19.7K
Voti: 2

WooCommerce offre un modo semplice per selezionare i prodotti "In evidenza" cliccando sull'icona a forma di stella nella colonna "In evidenza" nell'area di amministrazione.

Ho bisogno di poter filtrare e visualizzare solo i prodotti in evidenza nell'area di amministrazione. Qualcuno conosce un modo semplice per farlo?

Dopo alcune ricerche ho scoperto che questo viene gestito tramite meta key/values, dove _featured è la chiave e il valore può essere yes o no.

Sfortunatamente, poiché non viene utilizzata una tassonomia come le categorie prodotto, non è possibile usare la funzionalità di filtro nell'area di amministrazione per mostrare solo i prodotti in evidenza. Puoi ordinare la colonna "In evidenza" per raggrupparli tutti in cima o in fondo alla lista prodotti, ma è tutto qui.

1
Commenti

Ho trovato una soluzione qui: https://stackoverflow.com/questions/46470206/woocommerce-filter-by-featured-products-in-admin Funziona con Wordpress 4.9.

Jordi Jordi
21 gen 2018 11:28:29
Tutte le risposte alla domanda 3
9
13

Puoi ordinare la lista dei prodotti in base allo stato "in evidenza". Basta cliccare sulla stella in cima alla colonna... un clic posizionerà tutti gli elementi non in evidenza in cima, mentre due clic invertiranno l'ordine mostrando prima i prodotti in evidenza.

L'URL nell'area di amministrazione sarà simile a: /wp-admin/edit.php?post_type=product&orderby=featured&order=desc

Ordina prodotti per stato in evidenza

AGGIORNAMENTO:

Ok, si è scoperto che filtrare per stato "in evidenza" non è così difficile. WooCommerce filtra per "sottotipo", e poiché questo avviene anche attraverso i meta, possiamo sostanzialmente copiare il loro codice apportando qualche modifica.

La prima funzione aggiunge l'elemento select/drop-down, mentre la seconda gestisce le modifiche alla query di amministrazione.

/**
 * Filtra i prodotti per tipo
 *
 * @access public
 * @return void
 */
function wpa104537_filter_products_by_featured_status() {

     global $typenow, $wp_query;

    if ($typenow=='product') :


        // In evidenza/Non in evidenza
        $output .= "<select name='featured_status' id='dropdown_featured_status'>";
        $output .= '<option value="">'.__( 'Mostra tutti gli stati "in evidenza"', 'woocommerce' ).'</option>';

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

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

        $output .="</select>";

        echo $output;
    endif;
}

add_action('restrict_manage_posts', 'wpa104537_filter_products_by_featured_status');

/**
 * Filtra i prodotti nell'area di amministrazione in base alle opzioni
 *
 * @access public
 * @param mixed $query
 * @return void
 */
function wpa104537_featured_products_admin_filter_query( $query ) {
    global $typenow, $wp_query;

    if ( $typenow == 'product' ) {

        // Sottotipi
        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' );

Aggiornato per WooCommerce 3.0

La callback parse_query deve essere aggiornata poiché lo stato "in evidenza" non è più memorizzato come post meta.

/**
 * Filtra i prodotti nell'area di amministrazione in base alle opzioni
 *
 * @access public
 * @param mixed $query
 * @return void
 */
function wpa104537_featured_products_admin_filter_query( $query ) {
    global $typenow;

    if ( $typenow == 'product' ) {

        // Sottotipi
        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 giu 2013 03:58:22
Commenti

Grazie. Come ho notato nell'ultima frase della mia domanda, sono a conoscenza di quella funzione di ordinamento. Tuttavia, desidero utilizzare la funzione "Ordina Prodotti", che consente l'ordinamento tramite drag and drop, per ordinare i Prodotti in Evidenza, cosa non possibile di default.

Puoi filtrare per categoria, poi cliccare su "Ordina Prodotti" e trascinarli nell'ordine desiderato. Vorrei questa funzionalità per i prodotti in evidenza...

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

Oggi stavo proprio leggendo un articolo su come le persone non leggano interamente gli articoli sul web, sembra che tu mi abbia beccato. Controlla la mia modifica.

helgatheviking helgatheviking
28 giu 2013 23:08:34

Sembra che stessi trovando la mia soluzione mentre tu postavi la tua, e sembrano simili. Grazie!

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

Sì, sembra che stiamo facendo la stessa cosa. Una modifica carina... potrei usarla anche sui miei siti.

helgatheviking helgatheviking
28 giu 2013 23:48:01

In WordPress (4.7.5) e WooCommerce (3.0.7), il tuo codice non funziona.

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

Beh, è vecchio di 4 anni e WooCommerce ha subito una massiccia revisione con la versione 3.0. L'ho aggiornato e sembra funzionare.

helgatheviking helgatheviking
26 mag 2017 23:21:33

Grazie mille! Parte del nuovo codice è all'esterno. Ti suggerisco di controllarlo.

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

@helgatheviking Sei fantastico! Grazie per questo; funziona perfettamente in WP 4.8.3 e WC 3.1.2

chb chb
1 nov 2017 09:11:00

il tuo codice originale mi ha aiutato a creare un filtro per valore meta. grazie.

dw1 dw1
19 giu 2019 17:34:14
Mostra i restanti 4 commenti
3

Ho trovato questo plugin: https://wordpress.stackexchange.com/a/45447/15190, che sono riuscito a personalizzare per fornire una lista di selezione per filtrare i prodotti in evidenza. Con questo, sono in grado di utilizzare la funzionalità "Ordina prodotti" di WooCommerce tramite drag and drop per modificare facilmente l'ordine in cui i prodotti in evidenza appaiono nel widget Prodotti in evidenza e in altri contesti.

Ecco il codice con le mie personalizzazioni che lo renderà funzionante per i Prodotti in evidenza di WooCommerce:

<?php
/*
Plugin Name: Filtro Admin per Prodotti in Evidenza WooCommerce
Plugin URI: http://en.bainternet.info
Description: adattato da https://wordpress.stackexchange.com/q/45436/2487. Consente di visualizzare solo i prodotti in evidenza, permettendo poi di ordinarli tramite drag and drop
Version: 1.0
Author: Bainternet
Author URI: http://en.bainternet.info
*/

add_action( 'restrict_manage_posts', 'wpse45436_admin_posts_filter_restrict_manage_posts' );
/**
 * Prima crea il menu a discesa
 * 
 * @author Ohad Raz
 * 
 * @return void
 */
function wpse45436_admin_posts_filter_restrict_manage_posts(){
    $type = 'post';
    if (isset($_GET['post_type'])) {
        $type = $_GET['post_type'];
    }

    //applica il filtro solo al tipo di post desiderato
    if ('product' == $type){
        //modifica questo con l'elenco di valori che vuoi mostrare
        //in formato 'etichetta' => 'valore'
        $values = array(
            'Mostra solo prodotti in evidenza' => 'Yes', 
            'Mostra solo prodotti non in evidenza' => 'No',
        );
        ?>
        <select name="Featured">
        <option value=""><?php _e('Mostra prodotti in evidenza e non', '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' );
/**
 * Se inviato, filtra per meta del post
 * 
 * @author Ohad Raz
 * @param  (wp_query object) $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 giu 2013 23:24:05
Commenti

Non dimenticare di selezionare una delle nostre risposte come risposta ufficiale per rimuovere questa domanda dall'elenco delle 'domande senza risposta'.

helgatheviking helgatheviking
30 giu 2013 17:17:29

In WordPress (4.7.5) e WooCommerce (3.0.7), il tuo codice non funziona.

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

Codice obsoleto, non funziona con WP 5 e WC 4.8. Aggiunge il filtro di input sopra l'elenco prodotti, ma non filtra.

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

Puoi utilizzare il plug-in di WordPress Filter Featured Products for WooCommerce.

25 mag 2021 20:41:30
Commenti

Anche se non aggiornato da molto tempo, funziona ancora perfettamente. Grazie

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

Ho aggiornato il codice di @helgatheviking per chi non vuole usare un plugin. Chiedetemi o votate, non posso postare perché non ho abbastanza reputazione in questa community

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