Pregunta sobre Developing with WordPress de Wordpress:

Error fatal de PHP: Error no detectado: llamada a la función member () null null

Un usuario preguntó 👇

¿Por qué $ wpdb devuelve un valor nulo global en este código? No puedo hacer la consulta de mysql porque el mundo es nulo. Debajo del error en el archivo de registro de errores:

Error fatal de PHP: error no detectado: llamada a la función member () null null

public static function get_classifieds( $urls ) {

        global $wpdb;

        $dom_document = new DOMDocument();

        foreach($urls as $url) {

            if( ! function_exists( 'wp_remote_request' ) ) {

                $html = file_get_contents( $url );
                $dom_document->loadHTML( $html );

            } else {

                $response = wp_remote_request( $url );            
                $body = wp_remote_retrieve_body( $response ); 
                $dom_document->loadHTML( $body );

            } 

            $li_elements = $dom_document->getElementsByTagName( 'li' );

            foreach( $li_elements as $li_element ) {

                $pattern = '/itemsresult/';
                $class = $li_element->getAttribute( 'class' );

                if( preg_match( $pattern, $class ) ) {

                    $img_elements = $li_element->getElementsByTagName( 'img' );
                    $h3_elements = $li_element->getElementsByTagName( 'h3' );
                    $h4_elements = $li_element->getElementsByTagName( 'h4' );
                    $p_elements = $li_element->getElementsByTagName( 'p' );

                    foreach( $h3_elements as $h3_element) {

                        $h3_class = $h3_element->getAttribute( 'class' );
                        $is_null = $wpdb->query( "SELECT IFNULL( SELECT * FROM '{$wpdb->prefix}classifieds' WHERE title = {$h3_element->nodeValue})" , true );      

                        if( $h3_class == 'title' && $is_null ) {

                            echo "<h3>$h3_element->nodeValue</h3>";

                        }

                    }

                    foreach( $img_elements as $img_element) {

                        $src = $img_element->getAttribute( 'src' );

                        if( strpos( $src, 'img' ) && ! strpos( $src, 'no-img' ) ) {

                            echo "<img src='$src' />";

                        }

                    }

                    foreach( $p_elements as $p_element) {

                        $p_class = $p_element->getAttribute( 'class' );

                        if( $p_class == 'description' ) {

                            echo "<p>$p_element->nodeValue</p>";

                        } elseif( $p_class == 'locale' ) {

                            echo "<p><strong>$p_element->nodeValue</strong></p>";

                        } elseif( $p_class == 'timestamp' ) {

                            echo "<p>$p_element->nodeValue</p>";

                        }

                    }

                    foreach( $h4_elements as $h4_element) {

                        $h4_class = $h4_element->getAttribute( 'class' );

                        if( $h4_class == 'price' ) {

                            echo "<h4>$h4_element->nodeValue</h4>";

                        }

                    }

                }

            }

        }

    }

(@ alegremente)

Hace 1 año, 6 meses

¿Dónde y cuándo se da esto? Debe estar en un entorno de WordPress para tener las variables globales de WordPress, y debe tener las variables configuradas en sus valores.

(@richdeveloper)

Hace 1 año, 6 meses

Este es un plugin que estoy desarrollando y también llamé a esta variable global en otro archivo de este plugin y funciona, pero en este caso devuelve nulo y no funciona, ¿por qué no funciona?

Esta respuesta fue modificada hace 1 año, 6 meses.

(@ alegremente)

Hace 1 año, 6 meses

Eso no respondió a la pregunta de dónde y cuándo se administra. Lo atrapaste init? Lo atrapaste wp_loaded? ¿Es un filtro? ¿Se está ejecutando en la página de administración o en la portada?

(@richdeveloper)

Hace 1 año, 6 meses

Lamento responder de inmediato. Es una función de clase personalizada en el aditivo repetitivo de Devin Vinson. En la función de activación, la variable global funciona en una clase personalizada que no funciona.

(@richdeveloper)

Hace 1 año, 6 meses

Actualización: traté de reclamar wp-db.php con la constante ABSPATH pero estos resultados no están definidos. La variable global $ wpdb devuelve el mismo resultado que nulo: ¿por qué?

(@ alegremente)

Hace 1 año, 6 meses

Aún no ha respondido la pregunta, por lo que es difícil ayudar. Si está trabajando con el código de otra persona, debe hacerle una pregunta al autor. De lo contrario, solo podemos adivinar lo que está haciendo.

(@richdeveloper)

Hace 1 año, 6 meses

Intento explicarme mejor: encontré un enchufe de placa de caldera Devin Vinson y lo personalicé con mi código que ves arriba. Ahora, mi código devuelve este error porque la variable global $ wpdb o la constante ABSPATH no está visible o confirmada. Pero, ¿cómo lo incluyo en mi código personalizado? Disculpe si no puedo explicarme.

(@diondesigns)

Hace 1 año, 6 meses

Estás llamando a tu clase / función fuera de WordPress. Esto suele ocurrir cuando se carga un archivo PHP personalizado mediante AJAX. Esto se puede hacer, pero requiere mucho trabajo si desea utilizar clases / funciones de WordPress / etc.

Si necesita más ayuda, deberá mostrarnos el código que llama a su clase / función.

(@richdeveloper)

Hace 1 año, 6 meses

De acuerdo, @diondesigns y @joyously, ¿puedes enviarme un correo electrónico para agregarte a mi repositorio de github para que pueda compartir mi código contigo?

(@ alegremente)

Hace 1 año, 6 meses

No, solo debe responder las preguntas «¿dónde y cuándo se proporciona el código?» Encontrar la respuesta a esa pregunta puede ayudarlo a ver qué está mal en el código.

(@richdeveloper)

Hace 1 año, 6 meses

De acuerdo, entiendo hasta ahora que uso esta variable global del entorno de WordPress para que devuelva nulo. Ahora la pregunta es: ¿cómo puedo usar esta variable global desde un entorno de WordPress? ¿Tengo que incluir mi función en un gancho frontal? ¿O hay formas de incluir $ wpdb? Estoy buscando en Internet, pero probablemente mi búsqueda sea incorrecta.

(@ alegremente)

Hace 1 año, 6 meses

Si solo necesita la variable $ wpdb, puede cargarla usted mismo o no. Pero tiene otras llamadas a funciones WP en su código. Por lo tanto, debe saber cuándo desea ejecutar este código. Podría ser en una programación cron, o activando un plugin, o cada vez que se guarda un trabajo. No sé qué necesitas, pero parece interactuar con WP, por lo que probablemente deba estar en un aro que tenga sentido en la forma de hacer las cosas de WP. https://codex.wordpress.org/Plugin_API/Action_Reference

(@diondesigns)

Hace 1 año, 6 meses

El es $wpdb no hay variables fuera del entorno de WordPress. Si desea utilizarlo, necesita el código de WordPress que crea el $wpdb variable. El código real para hacer esto es simple:

define('SHORTINIT', true);
require_once($path_to_wordpress . 'wp-load.php');

El problema es el $path_to_wordpress variable. Si puede estar 100% seguro de que esa es la ubicación de su plugin [wproot]/wp-content/plugins/[yourplugin], entonces es fácil crear una ruta relativa wp-load.php. Pero WordPress permite que los sitios wp-content directorio a lugares fuera de la raíz de WordPress, por lo que no puede estar 100% seguro si su plugin solo está instalado en los sitios que usted controla.

Tenga en cuenta la definición de SHORTINIT constante. Eso le dice a WordPress que cargue las bases de datos, el caché y los enlaces de sistemas, y nada más. Según el flujo de su código, no desea cargar todo WordPress … pero si realmente lo necesita, elimine esa línea.

(@richdeveloper)

Hace 1 año, 6 meses

De acuerdo, lo entiendo. ¿Cómo ve que uso más funciones de WP, pero nada de esto funciona porque WP no está cargado? Así que tengo que incluir o vincular wp-load.php, pero ¿cómo funcionan los otros plugins?

(@diondesigns)

Hace 1 año, 6 meses

Como no tengo idea de lo que está haciendo en su plugin, no puedo responder su pregunta. Si esto se debe a un controlador AJAX, no sucederá en la mayoría de los plugins porque usan admin-ajax.php para su controlador AJAX.

También miré el enchufe estándar que está utilizando. Una tarea relativamente simple es una tarea compleja (innecesaria) y requiere mucho conocimiento de PHP. Surge la frase «tratando de clavar una clavija cuadrada en un agujero redondo». 🙂

¿Solucionó tu problema??

0 / 0

Deja una respuesta 0

Tu dirección de correo electrónico no será publicada.