Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

388
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda