Error no detectado: la clase ‘WP_Query’ no se encuentra en la URL – WordPress

4 minutos de lectura

creé un archivo ajax que pasa ID en la página. y esa página tiene una consulta. y tengo un error. Intento saber cuál es mi error y algunos sitios dicen que tengo que definir mi plantilla y requieren wp-load.php, pero algunos sitios dicen que tengo que hacerlo en function.php. y la verdad no se que hacer soy nuevo en wordpress woocommerce.

Error no detectado: clase ‘WP_Query’ no encontrada en xxxx/xxxx

Aquí está mi página (get-fabric.php)

   <?php  


    if(!empty($_POST['select_colour']))
    {
        $args = array(
        'post_type'      => 'product',
        'posts_per_page' => 1000,
        'product_cat'    => 'fabric'


        );

        $query = new WP_Query($args);


            while ( $query->have_posts() ) : $query->the_post();
            global $product;
            $regular_price = $product->get_price_html();

            $image = wp_get_attachment_image_src( get_post_thumbnail_id( $query->post->ID ), 'product' );
                echo '  <div class="col-md-3 fabric-active" data-fabcode="32860">
                <div class="fabric-cloth">
                    <div class="fabric-data">
                        <img src="'.$image[0].'" class="img-responsive cursor-on" />
                        <div class="fabric-code">
                            <p>'.$product->post->post_title.'</p>
                            <span>'.$regular_price.'</span>
                        </div>
                    </div>
                </div>
            </div>';
            endwhile;

    wp_reset_query();
    ?>
    <div class="col-md-3 fabric-active" data-fabcode="32860">
                <div class="fabric-cloth">
                    <div class="fabric-data">
                        <img src="'.$image[0].'" class="img-responsive cursor-on" />
                        <div class="fabric-code">
                            <p>'.$product->post->post_title.'</p>
                            <span>'.$regular_price.'</span>
                        </div>
                    </div>
                </div>
            </div>
  <?php
     }
  ?>

  • Hay algunos otros errores en su código. 1) debe reemplazar global $product; por $product = wc_get_product($query->post->ID); … 2) debe reemplazar $product->post->post_title por $query->post->post_title

    – LoicTheAztec

    22 de enero de 2018 a las 3:24

  • vale LoicTheAztec ya lo cambie, gracias por la ayuda hermano

    – usuario3678152

    22 de enero de 2018 a las 3:41

Si está llamando a esta URL directamente, que no es la forma en que se pretende que funcione WordPress ajax, aún puede hacer que este código se ejecute agregando este código php

$parse_uri = explode( 'wp-content', $_SERVER['SCRIPT_FILENAME'] );
require_once( $parse_uri[0] . 'wp-load.php' );

a la parte superior del archivo.

https://codex.wordpress.org/AJAX_in_Plugins Sé que esto dice Ajax en los complementos, pero esto también es lo que haría si desarrollara un tema personalizado para mantener su código WordPress-y.

  • Gracias JasonB por la respuesta rápida, traté de ponerlo y funciona. pero ¿puedo saber que es seguro poner esos códigos? porque encontré un sitio que no es seguro?. y ya vi ese enlace, pero realmente no sé cómo voy a hacerlo. para comprobar mi otra pregunta para ver mi archivo ajax https://stackoverflow.com/questions/48374145/uncaught-error-class-wp-query-not-found-in-url-wordpress(stackoverflow.com/questions/48373453/… )

    – usuario3678152

    22 de enero de 2018 a las 3:27


  • Sólo tienes que hacer algunos deberes. Use el códice de WP y los documentos de PHP y aprenda lo que está haciendo el código. Las dos líneas de código en esta respuesta simplemente cargan el archivo wp-load.php desde tu propio sitio para que no introduzcan ningún error por sí mismos. Debería usar los métodos del marco para crear solicitudes ajax y usar nonce para ayudar a asegurarse de que la solicitud sea válida. Mira esto también: wordpress.stackexchange.com/questions/214587/…

    – JasonB

    22 de enero de 2018 a las 3:37

  • Si tiene más cosas conectadas y funcionando pero tiene una pregunta específica de seguridad o protección, la publicaría como una nueva pregunta.

    – JasonB

    22 de enero de 2018 a las 3:39

  • Gracias por la ayuda hermano. lamentablemente me acaban de entregar este tipo de proyecto, y soy nuevo en wordpress. así que realmente no sé cómo hacerlo, y solo me dan 1 mes para terminarlo.

    – usuario3678152

    22 de enero de 2018 a las 3:45

La página que ha creado no tiene relación con WordPress. Ni estás incluyendo nada ni has declarado ninguna variable global. En ese caso, no solo WP_Query, nunca encontrará ningún método de WordPress.

Para este caso, hay 2 soluciones.

  1. (Recomendado) Incluir encabezado y pie de página usando las funciones respectivas.

    get_header() && get_footer()

  2. Declare la variable global antes de usarla.

    global $wp_query;

Espero que esto te ayude de alguna manera 🙂

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad