Come contare i post con un valore meta specifico in WordPress

18 giu 2014, 06:11:59
Visualizzazioni: 15.5K
Voti: 5

Come posso contare solo i post che hanno un valore specifico in un campo meta personalizzato?

$productCount = wp_count_posts('product');
echo $productCount->publish;

Questo codice mi restituisce il totale di tutti i post.

Come posso scoprire quanti di questi post hanno ad esempio un valore meta personalizzato cat?

0
Tutte le risposte alla domanda 2
1
11

Non esiste una funzione predefinita/nativa in WordPress per contare i post in base a un valore meta specifico. wp_count_posts conta solo il numero di post in base al tipo di post

Potrebbe essere utile qui utilizzare WP_Query per creare una query personalizzata per ottenere tutti i post con quel valore meta specifico e poi usare $wp_query->found_posts per ottenere il conteggio dei post.

Questo dovrebbe funzionare

 $query = new WP_Query( array( 'meta_key' => 'color', 'meta_value' => 'blue' ) );

   echo $query->found_posts;
18 giu 2014 08:29:20
Commenti

Questa risposta è probabilmente la prima idea che viene in mente. Tuttavia, potrebbe rivelarsi dispendiosa in termini di utilizzo delle risorse (RAM). In questi casi d'uso, è preferibile optare per una query SQL attraverso global $wpdb

Braza Braza
11 mag 2022 20:05:59
1

Probabilmente il modo migliore per farlo è:

global $wpdb;
$count = $wpdb->get_row("SELECT COUNT(*) AS THE_COUNT FROM $wpdb->postmeta WHERE (meta_key = 'color' AND meta_value = 'blue')");

return $count->THE_COUNT;

Ecco una raccolta di funzioni per semplificarne l'utilizzo:

    /**
     * Restituisce il numero di post per cui viene utilizzata una particolare metakey.
     * Opzionalmente qualificato da un valore specifico o da un array di valori della meta key.
     *
     * @param string            $key
     * @param null|string|array $value
     *
     * @return mixed
     */
    function get_meta_count( $key, $value = null) {
        global $wpdb;

        $where = get_meta_where($key, $value);
        $count = $wpdb->get_row("SELECT COUNT(*) AS THE_COUNT FROM $wpdb->postmeta WHERE $where");
        return $count->THE_COUNT;
    }

    /**
     * Restituisce i record postmeta per una particolare metakey.
     * Opzionalmente qualificato da un valore specifico o da un array di valori della meta key.
     *
     * @param string            $key
     * @param null|string|array $value
     *
     * @return mixed
     */
    function get_meta ( $key, $value = null) {
        global $wpdb;
        $where = get_meta_where($key, $value);
        return $wpdb->get_results("SELECT * FROM $wpdb->postmeta WHERE $where");
    }

    /**
     * Restituisce la stringa WHERE per una query su metakey
     *
     * @param string            $key
     * @param null|string|array $value
     *
     * @return string
     */
    function get_meta_where( $key, $value) {
        $where = "meta_key = '$key'";

        if (null !== $value) {
            if (\is_array($value)) {
                \array_walk($value,'add_quote');
                $in = \implode(',', $value);  // Separa i valori con una virgola
                $where .= " AND meta_value IN ($in)";
            } else {
                $where .= " AND meta_value = '$value'";
            }
        }

        return $where;
    }

    /**
     * Aggiunge apici attorno a ciascun valore in un array quando usato come funzione callback
     *
     * @param $value
     * @param $key
     */
    function add_quote( &$value, $key)
    {
        $value = "'$value'";
    }
2 dic 2019 02:00:55
Commenti

C'è un errore di battitura nel primo comando SQL - manca un apice singolo alla fine di "blue" - ho inviato una modifica.

Rik Lewis Rik Lewis
5 apr 2020 00:11:09