J'ai un script PHP que je veux utiliser pour créer un nouveau blog dans WPMU. Je n'arrive pas à appeler des fonctions wordpress telles que wpmu_create_user et wpmu_create_blog .
J'espère pouvoir exécuter ce script en tant que tâche cron à partir de la ligne de commande et collecter les nouvelles demandes de création de blog d'une base de données externe, créer un nouveau blog à l'aide des fonctions wordpress et mettre à jour la base de données avec les nouvelles informations de blog.
inclure le fichier wp-load.php (à la racine de votre installation wordpress) dans votre fichier script php comme suit,
require_once("/path/to/wordpress/wp-load.php");
vous devrez fournir le chemin abs du fichier wp-load, vous pouvez maintenant utiliser toutes les fonctions de wordpress dans votre script php
J'ai une solution universelle qui fonctionnera dans n'importe quel fichier php dans le dossier wp-content
sans aucun ajustement ni besoin de savoir ce qui est mystérieux 'path/to/wordpress'
require_once( explode( "wp-content" , __FILE__ )[0] . "wp-load.php" );
Il monte automatiquement à la racine de wordpress et charge wp-load.php
Vous pouvez simplement le coller n'importe où, peu importe si son plugin ou son fichier de thème fonctionne.
Je pense que des choses comme ../../../..
sont extrêmement mauvaises et quand vous modifiez la structure de vos dossiers de thème/plugin, vous pouvez devenir fou.
Note: cette solution suppose que n'avez pas renommé votre dossier wp-content
.
Pour wordpress 3.1, je devais spécifier l'hôte/le domaine car wp-includes/ms-settings.php: 100 en a besoin ou il meurt. Donc, mon script ressemble à quelque chose comme (notez que je l’utilise pour un site réseau/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;
?>
Cela devrait fonctionner:
require_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
c'est-à-dire lorsque le script php est sur le même serveur et que WP est installé à la racine. Comme dans la plupart des cas.
require_once('../../../wp-load.php');
Je pense que vous devez ajouter cette ligne avant toute utilisation de la fonction wordpress dans votre fichier personnalisé. et assurez-vous que j'ai ajouté ../ 3 fois selon ma structure d'installation wordpress.Il dépend de vos vérifications de structure manuellement . ex. si votre fichier personnalisé se trouve dans vos thèmes/yourtheme/custom.php, le code ci-dessus fonctionnera parfaitement. Sinon, ajoutez ensuite ../ ou supprimez un ou plusieurs ../ selon votre chemin.
Voici le code que j'utilise:
<?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);
?>
wordpress utilise une fonction phpass -
Cela fonctionnait pour moi car j'avais un mot de passe et le hachage dans un tableau (utilisateurs wp migrés) et je devais trouver un moyen de vérifier les informations de connexion
Saisissez ce téléchargement ici - https://github.com/sunnysingh/phpass-starter
tout ce dont vous avez besoin est cette fonction de base pour vérifier un mot de passe textuel pour un hachage 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
}
?>
Tous les crédits à Sunny Singh!