post_title - wordpress title header
¿Usando WPDB en una secuencia de comandos independiente? (9)
Estoy intentando conectarme a Wordpress usando WPDB porque es una clase tan hermosa y también hay configuraciones que se especifican en wp-config.php, así que no necesitaré especificarlo de nuevo.
Voy a escribir un pequeño script separado de wordpress principal para ejecutarlo en segundo plano que necesitará usar esta instancia de WPDB.
¿Cómo puedo archivar esto?
Cualquier ayuda es apreciada.
Esto debería hacer el truco también:
preg_match(''/^(.+)wp-content//.*/'', dirname(__FILE__), $path);
include($path[1] . ''wp-load.php'');
Puede usar $ wpdb en el nuevo archivo .php que está dentro de la carpeta del tema, usando el siguiente código.
$url = (!empty($_SERVER[''HTTPS''])) ? "https://".$_SERVER[''SERVER_NAME''].$_SERVER[''REQUEST_URI''] : "http://".$_SERVER[''SERVER_NAME''].$_SERVER[''REQUEST_URI''];
$url = $_SERVER[''REQUEST_URI''];
$my_url = explode(''wp-content'' , $url);
$path = $_SERVER[''DOCUMENT_ROOT'']."/".$my_url[0];
include_once $path . ''/wp-config.php'';
include_once $path . ''/wp-includes/wp-db.php'';
include_once $path . ''/wp-includes/pluggable.php'';
global $wpdb;
Seguir dos pasos es suficiente.
- Incluye el archivo wp-blog-header.php
- Antes de usar $ wpdb, ponga como $ wpdb global;
cualquier variable global que pueda usar en esta página después de eso. Asegúrese de dar la ruta de inclusión correcta de wp-blog-header.php. No es necesario incluir varios archivos.
Solo necesita incluir el archivo wp-load.php en su script.
require(''the/path/to/wp-load.php file'');
Una forma rápida y ligera con solo una línea es
require (dirname ( _FILE__ ). ''/ wp-blog-header.php'');
La razón es porque wordpress inicializa la carga de index.php y cuando revisas index.php, ves:
require (dirname ( __FILE__ ). ''/ wp-blog-header.php'');
Esto carga y carga wordpress.
entonces, para usar wordpress fuera de la instalación de wordpress, simplemente cree un nuevo archivo y luego escriba:
require (dirname ( __FILE__ ). ''/ wp-blog-header.php'');
luego para una prueba, escriba: global $ wpdb; var_export ($ wpdb).
así que ahora tiene acceso a todas las API de wordpress y al objeto de base de datos $ wpdb.
WordPress en realidad le permite usar su propio DBA (capa de abstracción de base de datos) simplemente creando un archivo llamado db.php
y guardándolo en la raíz de su directorio wp-content
.
Tuve el problema de tener que acceder a una base de datos a través de la clase que escribí, que no tenía nada que ver con WordPress, pero no quería crear un DBA completamente nuevo, solo con este script.
Como el WPDB
predeterminado no le permite usar el patrón de fábrica, rápidamente escribí algunas líneas para respaldarlo y lo db.php
a db.php
...
<?php
class DB extends wpdb
{
protected static $instance = null;
public static function getInstance()
{
if (!self::$instance) {
self::$instance = new DB(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);
}
return self::$instance;
}
}
$wpdb = DB::getInstance();
Ahora, cuando necesite usar wpdb
desde otro lugar (en mi caso una clase que no sea de WordPress), puede usar juse:
$wpdb = DB::getInstance();
desde dentro de un método, en lugar de lo horrible global
.
solo deberías require_once (''../../../ wp-load.php'');
y luego todas las clases de wordpress se enganchan y todo se cargará. ahora puede comenzar a ejecutar con la base de datos usando global $ wpdb y se iniciará la instancia de wpdb
La mejor (más rápida y segura) forma de cargar solo la carga de la funcionalidad principal de WordPress es usar la bandera de SHORTINIT
así:
define( ''SHORTINIT'', true );
require( ''/path/to/wp-load.php'' );
//Here you can use WordPress core features, for example the $WPDB object
Para obtener más información sobre esto y ver qué se carga, es verificar el código en /wp-settings.php
. Allí encontrarás la siguiente sección:
// Stop most of WordPress from being loaded if we just want the basics.
if ( SHORTINIT )
return false;
Esto significa que no se cargará nada después de esto, y hay muchas cosas que puedes ver. La huella será mucho más pequeña que solo cargar wp-load.php
y todavía le da acceso a todas las funciones integradas en el núcleo de WordPress, a diferencia de incluir /wp-includes/wp-db.php
directamente. Muchas funciones en WP core también tienen dependencias en otros archivos y puede ser un desastre averiguar exactamente qué archivos necesita incluir para poder hacer lo que quiera. SHORTINIT
incluye las dependencias necesarias para que no tenga que preocuparse por esto.
Si sabe exactamente lo que necesita, por ejemplo, solo WPDB, la manera más rápida es, por supuesto, incluir solo los archivos que necesita, pero SHORTINIT
proporciona una forma más segura y estandarizada de cargar el núcleo de WP y las dependencias. Con SHORTINIT
WordPress no carga complementos, la mayoría de las partes de la API del complemento, temas, funciones de tema y la mayoría de las funciones de administración y frontend. Aquí es donde está el código pesado en una instalación típica de WordPress. En la mayoría de los casos, creo que SHORTINIT
vale la pequeña compensación en velocidad / rendimiento en comparación con incluir solo los archivos que necesita y, en la mayoría de los casos, es un gran aumento de rendimiento en comparación con una carga completa.
<?php
$path = $_SERVER[''DOCUMENT_ROOT''];
include_once $path . ''/wp-config.php'';
include_once $path . ''/wp-load.php'';
include_once $path . ''/wp-includes/wp-db.php'';
include_once $path . ''/wp-includes/pluggable.php'';
// $wpdb is available, do stuff