Contar publicaciones que tienen un valor de meta específico

18 jun 2014, 06:11:59
Vistas: 15.5K
Votos: 5

¿Cómo puedo contar solo las publicaciones que tienen un valor específico en un campo meta personalizado?

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

Eso me da el total de todas las publicaciones.

¿Cómo puedo saber cuántas de esas publicaciones tienen por ejemplo un valor meta personalizado de cat?

0
Todas las respuestas a la pregunta 2
1
11

No existe una función predeterminada/nativa en WordPress para contar publicaciones según un valor de meta específico. wp_count_posts solo cuenta la cantidad de publicaciones según el tipo de publicación.

Podría ser útil aquí usar WP_Query para crear una consulta personalizada que obtenga todas las publicaciones con ese valor de meta específico y luego usar $wp_query->found_posts para obtener el conteo de publicaciones.

Esto debería funcionar:

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

   echo $query->found_posts;
18 jun 2014 08:29:20
Comentarios

Esta respuesta probablemente sea la primera idea que viene a la mente. Sin embargo, esto puede resultar extensivo en términos de uso de recursos (RAM). En estos casos de uso, lo mejor es optar por una consulta SQL a través de global $wpdb

Braza Braza
11 may 2022 20:05:59
1

Probablemente la mejor manera de hacer esto es:

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;

Aquí hay una colección de funciones para facilitar su uso:

    /**
     * Devuelve el número de posts para los que se utiliza una metaclave particular.
     * Opcionalmente calificado por un valor específico o valores en un array de la metaclave.
     *
     * @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;
    }

    /**
     * Devuelve los registros de postmeta para una metaclave particular.
     * Opcionalmente calificado por un valor específico o valores en un array de la metaclave.
     *
     * @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");
    }

    /**
     * Devuelve la cadena WHERE para una consulta de metaclave
     *
     * @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);  // Separar valores con una coma
                $where .= " AND meta_value IN ($in)";
            } else {
                $where .= " AND meta_value = '$value'";
            }
        }

        return $where;
    }

    /**
     * Añade comillas alrededor de cada valor en un array cuando se usa como función de callback
     *
     * @param $value
     * @param $key
     */
    function add_quote( &$value, $key)
    {
        $value = "'$value'";
    }
2 dic 2019 02:00:55
Comentarios

Hay un error tipográfico en el primer comando SQL - falta una comilla simple al final de "blue" - he enviado una edición.

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