2010-01-19 24 views
32

Tengo un script Php que quiero usar para crear un nuevo blog en WPMU. Tengo problemas para llamar a funciones de WordPress como wpmu_create_user y wpmu_create_blog.Cómo llamar a las funciones de WordPress en script PHP personalizado

Espero que esta secuencia de comandos se ejecute como un trabajo cron desde la línea de comandos y recoger nuevas solicitudes de creación de blog desde una base de datos externa, crear un nuevo blog con las funciones de wordpress y actualizar el db con nueva información del blog.

+0

¿Cuál es el código que tiene ahora? Realmente necesitamos ver algo para poder diagnosticarlo. – brianreavis

+0

Brian, ver el código a continuación, todo entre las líneas horizontales es mi código. No sé cómo formatearlo, así que muestra todos los códigos en el formato especial. –

Respuesta

41

incluyen archivo wp-load.php (en la raíz de la instalación de wordpress) en el archivo de script php como tal,

require_once("/path/to/wordpress/wp-load.php"); 

tendrá que proporcionar al abspath del archivo wp-carga, ahora se puede utilizar todas las funciones de WordPress en el script php

+0

Aunque eso también ejecutará Wordpress ... –

+0

sí también cargará wordpress ... pero hará que todas las funciones estén disponibles para su uso –

+0

intenté con la solución anterior. Funciona en un archivo pero no en los archivos consecuentes. –

1

siguiente es el código que estoy utilizando:


<?PHP 

require_once ('/path/to/wordpress/wp-load.php'); 
require_once ('/path/to/wordpress/wp-blog-header.php'); 
require_once ('/path/to/wordpress/wp-includes/registration.php'); 

do_action('wpmuadminedit', ''); 

//Code to Connect and Select the external database 

//Code to Connect to the external DB and get the new order details: 
NewBlogName=$name and AdminEmail=$email 

if (!email_exists($email)) 
     { 
       // email does exist, create a new user 
       $name = create_name_from_email($email); 
       $password = "use a default password"; 
       $user_id=wpmu_create_user($name, $password, $email); 
       create_blog($email, $title, $user_id, $password); 
     } 
     else 
     { 
       // user exists, create new blog 
       $user_id=email_exists($email); 
       $password = "use existing wordpress password"; 
       create_blog($email, $title, $user_id, $password); 
    } 

function create_name_from_email ($email) { 
preg_match('/[^@]+)@/',$email,$matches); 
$name = $matches[1]; 
return $name; 
} 

//Creates a new blog, expects user to already exist. 
function create_blog($email, $title, $user_id, $password) 
{ 
//Code to Update external DB that the order is in process 

    $public = array("public" => 1); 
    if (constant('VHOST') == 'yes') 
    { 
      $newdomain = $domain . "." . $current_site->domain; 
      $path = $base; 
    } 
    else 
    { 
      $newdomain = $current_site->domain; $path = $base . $domain . '/'; 
    } 
    $domain = strtolower($domain); 
    $newdomain = strtolower($newdomain); 
    $path = strtolower($path); 
    $meta = apply_filters('signup_create_blog_meta', array('lang_id' => 1, $public)); 
    $meta = apply_filters("add_singup_meta", $meta); 
    wpmu_create_blog($newdomain, $path, $title, $user_id , $meta, $current_site->id); 
    do_action('wpmu_activate_blog', $blog_id, $user_id, $password, $title, $meta); 


    // Update external DB with BlogUrl, NewBlogName, AdminPassword, 

OrderStatus=Complete. 

mysql_close($con); 

?> 

14

Para wordpress 3.1, tuve que especificar el host/dominio porque wp-includes/ms-settings.php: 100 lo necesita o se muere. Así que mi escritura se ve algo como (Nota lo estoy usando para una red y/o Zona multiblog):

#!/usr/bin/php -q 

<?php 
#for multi-blog only 
$blog_id = 1; 

#specify host or domain (needed for wp-includes/ms-settings.php:100) 
$_SERVER[ 'HTTP_HOST' ] = 'localhost'; 

#location of wp-load.php so we have access to database and $wpdb object 
$wp_load_loc = "/path/to/wordpress/wp-load.php"; 

require_once($wp_load_loc); 

#for multi-blog only 
switch_to_blog($blog_id); 

#test to make sure we can access database 
echo $wpdb->prefix; 
?> 
+1

¡Gracias! ¡switch_to_blog() era exactamente lo que estaba buscando aquí! – jsims281

4

esto debería funcionar:

require_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php'); 

es decir, cuando el script php es en el mismo servidor y WP está instalado en la raíz. Como la mayoría de los casos son

+0

No en un trabajo cron (según lo solicitado por OP) no lo son. – pguardiario

+0

Fallará si wordpress no está dentro de la raíz del servidor, pero en alguna carpeta como www.misitio.es/some/path/wordpress – pie6k

2
require_once('../../../wp-load.php'); 

Creo que tiene que agregar esta línea antes de cualquier uso de la función de WordPress en su archivo personalizado. y asegúrate de haber agregado ../ 3 veces según mi estructura de instalación de WordPress. Depende de tus controles de estructura manualmente. ej. si su archivo personalizado está dentro de sus temas/yourtheme/custom.php, entonces el código anterior funcionará perfectamente y si no, agregue ../ o elimine uno o más ../ según su ruta.

24

Tengo solución universal que funcionará en cualquier archivo php dentro wp-content carpeta sin ningún ajuste o que necesitan saber lo que es misterioso 'path/to/wordpress'

require_once(explode("wp-content" , __FILE__)[0] . "wp-load.php"); 

no hace sino automáticamente a raíz del wordpress y carga wp-load.php

Puede simplemente pegarlo en cualquier lugar, sin importar si su plugin o archivo de tema funcionará.

Creo que cosas como ../../../.. se ven muy mal y cuando modificas la estructura de tus carpetas de tema/complemento puedes volverte loco.


Nota: Esta solución supone que usted no cambió el nombre de la carpeta wp-content.

+1

Esto asume que no ha cambiado el nombre de su carpeta wp-content. Gran respuesta –

+1

Eso es verdad, añadiré una nota sobre esto a mi respuesta. – pie6k

+0

Simplemente agregue esto en su lugar: include_once $ _SERVER ['DOCUMENT_ROOT']. '/wp-load.php'; – ancm

0

wordpress utiliza una función phpass -

Esto funcionó para mí, ya que tenía una contraseña y el hash en una tabla (los usuarios migrados WP) y tenía que encontrar una manera de comprobar los detalles de inicio de sesión -

Grab esta descarga aquí - https://github.com/sunnysingh/phpass-starter

todo u necesidad de esta función básica es para comprobar una contraseña de texto a un hash de WordPress:

<?php 

require_once("PasswordHash.php"); 
$hasher = new PasswordHash(8, false); 


// Check that the password is correct 
$check = $hasher->CheckPassword($password, $stored_hash); 

if ($check) { 

    // password good 

} else { 

// password wrong 

} 

?> 

todo el crédito ¡a Sunny Singh!

Cuestiones relacionadas