2010-01-19 26 views
32

Tôi có tập lệnh Php mà tôi muốn sử dụng để tạo blog mới trong WPMU. Tôi gặp sự cố khi gọi các chức năng wordpress như wpmu_create_userwpmu_create_blog.Cách gọi các chức năng wordpress trong tập lệnh php tùy chỉnh

Mong muốn của tôi là chạy tập lệnh này dưới dạng cron job từ dòng lệnh và nhận yêu cầu tạo blog mới từ db bên ngoài, tạo blog mới bằng cách sử dụng chức năng wordpress và cập nhật db bằng thông tin blog mới.

+0

Mã bạn có ngay bây giờ là gì? Chúng tôi thực sự cần phải nhìn thấy một cái gì đó để chẩn đoán nó. – brianreavis

+0

Brian, Xem mã bên dưới, mọi thứ giữa các đường nằm ngang là mã của tôi. Tôi không biết làm thế nào để định dạng nó để nó cho thấy tất cả các mã trong định dạng đặc biệt. –

Trả lời

41

bao gồm tập tin wp-load.php (trong thư mục gốc cài đặt wordpress của bạn) trong tập tin script php của bạn như vậy,

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

bạn sẽ phải cung cấp các abspath của tập tin wp-load, bây giờ bạn có thể sử dụng tất cả các chức năng của wordpress trong kịch bản php của bạn

+0

Mặc dù điều đó sẽ chạy Wordpress quá .... –

+0

có nó sẽ tải wordpress quá ... nhưng sẽ làm cho tất cả các chức năng sẵn có để sử dụng –

+0

tôi đã thử giải pháp trên. Hoạt động trong một tệp nhưng không có trong tệp hậu quả. –

1

Tiếp theo là mã tôi đang sử dụng:


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

Đối với wordpress 3.1, tôi phải chỉ định máy chủ/tên miền vì wp-includes/ms-settings.php: 100 cần hoặc nó chết. Vì vậy, kịch bản của tôi trông giống như sau (lưu ý tôi đang sử dụng nó cho một mạng/multiblog chỗ):

#!/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

Cảm ơn bạn! switch_to_blog() chính xác là những gì tôi đang tìm kiếm ở đây! – jsims281

4

này nên làm việc:

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

tức Khi kịch bản php là trên cùng một máy chủ và WP được cài đặt trên thư mục gốc. Như hầu hết các trường hợp.

+0

Không phải trong một công việc cron (theo yêu cầu của OP) họ không. – pguardiario

+0

Nó sẽ thất bại nếu wordpress không phải là bên trong thư mục gốc của máy chủ, nhưng trong một số thư mục như www.mysite.com/some/path/wordpress – pie6k

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

Tôi nghĩ bạn phải thêm dòng này trước khi sử dụng bất kỳ chức năng wordpress nào trong tệp tùy chỉnh của bạn. và chắc chắn rằng tôi đã thêm ../ 3 lần theo cấu trúc cài đặt wordpress của tôi. Nó phụ thuộc vào cấu trúc của bạn kiểm tra bằng tay. ví dụ: nếu tệp tùy chỉnh của bạn nằm trong chủ đề của bạn/yourtheme/custom.php thì mã trên sẽ hoạt động hoàn hảo và nếu không thì hãy thêm ../ hoặc xóa một hoặc nhiều ../ theo đường dẫn của bạn.

24

tôi đã có giải pháp phổ biến mà sẽ làm việc trong bất kỳ tập tin php bên wp-content thư mục mà không cần bất kỳ điều chỉnh hoặc cần phải biết những gì là huyền bí 'path/to/wordpress'

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

Nó chỉ tự động đi đến gốc rễ của wordpress và tải wp-load.php

Bạn chỉ có thể dán bất kỳ thứ gì bất kể plugin hoặc tệp chủ đề của nó và nó sẽ hoạt động.

Tôi nghĩ các công cụ như ../../../.. trông cực kỳ tệ và khi bạn sửa đổi cấu trúc thư mục của chủ đề/plugin, bạn có thể bị điên.


Note: Giải pháp này giả sử bạn không đổi tên thư mục wp-content của bạn.

+1

Điều này giả định rằng bạn chưa đổi tên thư mục nội dung wp của bạn. Câu trả lời tuyệt vời –

+1

Đó là sự thật, tôi sẽ thêm lưu ý về điều này vào câu trả lời của tôi. – pie6k

+0

Chỉ cần thêm thay thế này: include_once $ _SERVER ['DOCUMENT_ROOT']. '/wp-load.php'; – ancm

0

wordpress sử dụng một hàm phpass -

này làm việc cho tôi là tôi đã có một mật khẩu và băm trong một bảng (di cư người dùng wp) và đã phải tìm một cách để kiểm tra chi tiết đăng nhập -

Grab tải này ở đây - https://github.com/sunnysingh/phpass-starter

tất cả các u cần là chức năng cơ bản này để kiểm tra mật khẩu văn bản để một 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 

} 

?> 

Tất cả tín dụng s đến Sunny Singh!

Các vấn đề liên quan