2010-01-19 18 views
32

Ho uno script Php che desidero utilizzare per creare un nuovo blog in WPMU. Sto riscontrando problemi nel chiamare funzioni wordpress come wpmu_create_user e wpmu_create_blog.Come chiamare le funzioni di wordpress nello script php personalizzato

La mia speranza è di ottenere questo script in esecuzione come cron job dalla riga di comando e raccogliere nuove richieste di creazione blog da un db esterno, creare un nuovo blog utilizzando le funzioni wordpress e aggiornare il database con le nuove informazioni del blog.

+0

Qual è il codice che hai adesso? Abbiamo davvero bisogno di vedere qualcosa per diagnosticarlo. – brianreavis

+0

Brian, guarda il codice qui sotto, tutto tra le linee orizzontali è il mio codice. Non so come formattare in modo che mostri tutto il codice nel formato speciale. –

risposta

41

includono file wp-load.php (nella root della vostra installazione di WordPress) nel file di script php in questo modo,

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

si dovrà fornire l'abspath del file wp-load, ora è possibile utilizzare tutte le funzioni del wordpress nello script php

+0

Anche se verrà eseguito anche Wordpress .... –

+0

sì, verrà caricato anche wordpress ... ma renderà disponibili tutte le funzioni per l'uso –

+0

ho provato la soluzione di cui sopra. Funziona in un file ma non nei file conseguenti. –

1

seguito è riportato il codice che sto usando:


<?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

Per wordpress 3.1, ho dovuto specificare l'host/dominio perché wp-includes/ms-settings.php: 100 ne ha bisogno o muore. Quindi il mio script sembra qualcosa di simile (notare Io lo utilizzo per una rete/sito 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

Grazie! switch_to_blog() era esattamente quello che stavo cercando qui! – jsims281

4

questo dovrebbe funzionare:

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

cioè Quando lo script php si trova sullo stesso server e WP è installato sulla radice. Come la maggior parte dei casi

+0

Non in un cron job (come richiesto da OP) non lo sono. – pguardiario

+0

Fallisce se wordpress non si trova nella root del server, ma in alcune cartelle come www.mysite.com/some/path/wordpress – pie6k

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

Penso che devi aggiungere questa riga prima di qualsiasi utilizzo della funzione di stampa di parole nel tuo file personalizzato. e assicurarsi di aver aggiunto ../ 3 volte secondo la mia struttura di installazione di wordpress. Dipende dai controlli di struttura manualmente. ex. se il tuo file personalizzato è all'interno dei tuoi temi/yourtheme/custom.php allora il codice sopra funzionerà perfettamente e in caso contrario aggiungere ../ o rimuovere uno o più ../ come da percorso.

24

Ho soluzione universale che funzionerà in ogni file php all'interno wp-content cartella senza alcuna regolazione o che hanno bisogno di sapere che cosa è misteriosa 'path/to/wordpress'

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

E 'solo automaticamente fino a radice wordpress e carica wp-load.php

Puoi incollarlo anywehre indipendentemente dal suo plug-in o file del tema e funzionerà.

Penso che cose come ../../../.. appaiano estremamente brutte e quando modifichi la struttura delle tue cartelle di temi/plugin puoi diventare pazzo.


Nota: Questa soluzione presuppone che non ha rinominato la cartella wp-content.

+1

Ciò presuppone che non è stata rinominata la cartella del contenuto wp. Ottima risposta –

+1

Questo è vero, aggiungerò una nota a riguardo alla mia risposta. – pie6k

+0

Aggiungilo invece: include_once $ _SERVER ['DOCUMENT_ROOT']. '/wp-load.php'; – ancm

0

wordpress utilizza una funzione phpass -

questo ha lavorato per me, come ho avuto una password e l'hash in una tabella (migrato gli utenti WP) e ha dovuto trovare un modo per verificare password -

Grab questo download qui - https://github.com/sunnysingh/phpass-starter

tutto u bisogno è questa funzione di base per controllare una password di testo ad un hash 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 

} 

?> 

tutto il merito s a Sunny Singh!

Problemi correlati