Numără postările care au o valoare meta specifică

18 iun. 2014, 06:11:59
Vizualizări: 15.5K
Voturi: 5

Cum pot număra doar postările care au o valoare specifică într-un câmp meta personalizat?

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

Aceasta îmi afișează numărul total al tuturor postărilor.

Cum pot afla câte dintre aceste postări au o valoare meta personalizată, de exemplu cat?

0
Toate răspunsurile la întrebare 2
1
11

Nu există o funcție implicită/nativă în WordPress pentru a număra postări după o valoare meta specifică. wp_count_posts numără doar cantitatea de postări în funcție de tipul de postare.

Aici ar putea fi util să folosiți WP_Query pentru a crea o interogare personalizată care să obțină toate postările cu acea valoare meta specifică și apoi să utilizați $wp_query->found_posts pentru a obține numărul de postări.

Acest cod ar trebui să funcționeze:

$query = new WP_Query( array( 'meta_key' => 'culoare', 'meta_value' => 'albastru' ) );

echo $query->found_posts;
18 iun. 2014 08:29:20
Comentarii

Acest răspuns este probabil prima idee care ne vine în minte. Cu toate acestea, aceasta se poate dovedi costisitoare din punct de vedere al resurselor utilizate (RAM). În astfel de cazuri de utilizare, cel mai bine este să optați pentru o interogare SQL prin intermediul global $wpdb

Braza Braza
11 mai 2022 20:05:59
1

Probabil cel mai bun mod de a face acest lucru este:

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;

Iată o colecție de funcții pentru a o folosi mai ușor:

    /**
     * Returnează numărul de articole pentru care este folosită o anumită cheie meta.
     * Opțional, poate fi calificată de o valoare specifică sau de un array de valori ale cheii meta.
     *
     * @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;
    }

    /**
     * Returnează înregistrările postmeta pentru o anumită cheie meta.
     * Opțional, poate fi calificată de o valoare specifică sau de un array de valori ale cheii meta.
     *
     * @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");
    }

    /**
     * Returnează condiția WHERE pentru o interogare de cheie meta
     *
     * @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);  // Separează valorile cu virgulă
                $where .= " AND meta_value IN ($in)";
            } else {
                $where .= " AND meta_value = '$value'";
            }
        }

        return $where;
    }

    /**
     * Adaugă ghilimele în jurul fiecărei valori dintr-un array atunci când este folosită ca funcție callback
     *
     * @param $value
     * @param $key
     */
    function add_quote( &$value, $key)
    {
        $value = "'$value'";
    }
2 dec. 2019 02:00:55
Comentarii

Există o greșeală de tipar în prima comandă SQL - lipsește un ghilimele la sfârșitul cuvântului "blue" - am trimis o corectură.

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