Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

384
Vistas
Consulta sql de WooCommerce para encontrar productos con una clave meta específica y un valor meta

Estoy tratando de obtener productos con un campo personalizado con condición de valor de DB.

El campo personalizado se llama: "_filtered_product" .
Quiero obtener productos solo con valor = 1

Esta es la consulta SQL que he escrito.

 $view_low_filt_sql = "LEFT JOIN $wpdb->postmeta manage ON (p.ID = manage.post_id AND manage.meta_key = '_manage_stock') LEFT JOIN $wpdb->postmeta stock ON (p.ID = stock.post_id AND stock.meta_key = '_stock') LEFT JOIN $wpdb->postmeta threshold ON (p.ID = threshold.post_id AND threshold.meta_key = '_low_inventory_number') LEFT JOIN $wpdb->postmeta filtered ON (p.ID = filtered.post_id AND filtered.meta_key = '_filtered_product') WHERE (p.post_type = 'product' OR p.post_type = 'product_variation') AND (p.post_status = 'publish' OR p.post_status = 'private' OR p.post_status = 'draft') AND manage.meta_value = 'yes' AND threshold.meta_value IS NOT NULL AND filtered.meta_value = '1' AND IFNULL(CAST(stock.meta_value AS SIGNED),0) <= CAST(threshold.meta_value AS SIGNED) ";
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

No estoy seguro de por qué desea escribir su propia sql query para esta tarea simple, ¡mientras que podría usar wp_query !

Dicho esto, podría usar el siguiente fragmento de código para obtener todos los productos con una clave meta específica y un valor meta:

 global $wpdb; $meta_key = '_filtered_product'; $meta_value = '1'; $sql_statement = "SELECT {$wpdb->prefix}posts.* FROM {$wpdb->prefix}posts INNER JOIN {$wpdb->prefix}postmeta ON ( {$wpdb->prefix}posts.ID = {$wpdb->prefix}postmeta.post_id ) WHERE 1=1 AND ( ( {$wpdb->prefix}postmeta.meta_key = '{$meta_key}' AND {$wpdb->prefix}postmeta.meta_value = '{$meta_value}' ) ) AND {$wpdb->prefix}posts.post_type = 'product' AND ({$wpdb->prefix}posts.post_status = 'publish' OR {$wpdb->prefix}posts.post_status = 'private') GROUP BY {$wpdb->prefix}posts.ID ORDER BY {$wpdb->prefix}posts.post_date DESC"; $sql = $wpdb->prepare($sql_statement); $sql_results = $wpdb->get_results($sql, ARRAY_A); if ($sql_results) { foreach ($sql_results as $result) { echo "<p>Product id: " . $result['ID'] . " and product title: " . $result['post_title'] . "<p>"; } } else { echo "Sorry can't find anything at the moment!"; } wp_reset_postdata();

Lo que generará esto:

 Product id: {the product id} and product title: {the product name that matches the query}

Nota:

  • La consulta anterior recuperará todos los datos de un producto. Solo usé ID y title para darle un ejemplo.
  • Si su $meta_value es una cadena, entonces está todo listo, lo que significa que he escrito la consulta, asumiendo que su metavalor es una cadena. Sin embargo, si NO lo es, utilice este {$meta_value} en lugar de '{$meta_value}' .
  • $wpdb global y aproveché sus propiedades y métodos.
  • En lugar de codificar el prefijo de las tablas de la base de datos, que de forma predeterminada sería wp_ , he usado {$wpdb->prefix} .
  • También he usado $wpdb->prepare declaración para asegurar la declaración sql.
  • Además, he usado ARRAY_A como segundo argumento en la $wpdb->get_results para obtener los datos como una matriz asociativa.
  • Además, tenga en cuenta que esta consulta está ordenada por fecha, de forma descendente, lo que significa que los productos recientes se mostrarán primero.

Realizando la misma consulta usando wp_query :

 $meta_key = '_filtered_product'; $meta_value = '1'; $args = array( 'post_type' => 'product', 'posts_per_page' => -1, 'meta_query' => array( array( 'key' => $meta_key, 'value' => $meta_value, 'compare' => '=', ) ) ); $woo_custom_query = new WP_Query($args); if ($woo_custom_query->have_posts()) { while ($woo_custom_query->have_posts()) { $woo_custom_query->the_post(); the_title(); } } else { echo "Sorry can't find anything at the moment!"; } wp_reset_postdata();

¡Esta respuesta ha sido completamente probada en woocommerce 5.x+ y funciona bien!

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda