每天导入用户一次,不带插件

时间:2015-03-30 作者:Interactive

我需要每天将用户导入我的WP数据库一次。所以我有一个每天运行一次的脚本来执行一个操作。我现在的问题是,在这件事上我有点不知所措。

另一家公司在中为我提供用户数据。csv文件。然后,我需要将此文件导入我的WP数据库。

我每天运行一次的脚本如下(这在我的functions.php中):

add_action( \'wp\', \'prefix_setup_schedule\' );
/**
* On an early action hook, check if the hook is scheduled - if not, schedule it.
*/
function prefix_setup_schedule() {
    if ( ! wp_next_scheduled( \'prefix_hourly_event\' ) ) {
        wp_schedule_event( time(), \'hourly\', \'prefix_hourly_event\');
    }
}


add_action( \'prefix_hourly_event\', \'prefix_do_this_hourly\' );
/**
* On the scheduled action hook, run a function.
*/
function prefix_do_this_hourly() {
    wp_mail( \'user@domain.com\', \'Automatic email sent at \'.time(), \'Automatic scheduled email from WordPress.\');
}
在服务器上运行一个cronjob,激活wp-cron.php 每天一次。如果没有任何用户,脚本将不会运行,因此我将激活它。一旦有活动,它就会运行。

这是一个每小时发送一封电子邮件的简单工作示例。现在我需要导入用户。

以下是我的发现:

LOAD DATA INFILE \'path/to/file/users.csv\'
INTO TABLE discounts
FIELDS TERMINATED BY \',\'
ENCLOSED BY \'"\'
LINES TERMINATED BY \'\\n\'
IGNORE 1 ROWS;
我不知道这是否有效,我还没到那里。我现在面临的问题是WordPres的usersystem存在两个表wp_userwp_usermeta.

有谁能告诉我,我是否走上了正确的道路,以及如何解决这个问题。有没有一种方法可以将。csv文件,并选择要导入的内容,包括userusermeta 桌子?

M、

我改变了思维方式,想做以下事情:

$row = 1;
ini_set(\'auto_detect_line_endings\',TRUE);
if (($handle = fopen(get_bloginfo(\'template_directory\')."/import_test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
    $num = count($data);
    echo "<p> $num fields in line $row: <br /></p>\\n";
    $row++;
    for ($c=0; $c < $num; $c++) {
        echo $data[$c] . "<br />\\n";
    }
    }
    fclose($handle);
}
这是来自的直接副本http://php.net/fgetcsv.
现在我想用wp_create_user 函数添加用户
同时,我需要向该用户添加user\\u meta(我想)。有什么想法吗?我可以添加一个带有元字段的用户,并从csv文件中选择与vars?

编辑-
我已经做了这么多,但最后一部分没法完成。我已经修复了添加新用户的问题
foreach通过csv循环添加所有用户:

$filepath = get_bloginfo(\'template_directory\')."/import_test.csv";
ini_set(\'auto_detect_line_endings\',TRUE);
$file = fopen($filepath, "r") or die("Error opening file");
$i = 0;

while(($line = fgetcsv($file, 1000, ";")) !== FALSE) {
    if($i == 0) {
    $c = 0;
    foreach($line as $col) {
        $cols[$c] = $col;
        $c++;
    }
} else if($i > 0) {
$c = 0;
    foreach($line as $col) {
        $data[$i][$cols[$c]] = $col;
        $c++;
    }
}
$i++;
}

foreach ($data as $gebruiker){
    $username = $gebruiker[\'username\'];
    if ( username_exists( $username ) ){
        $user = get_user_by( \'login\', $username);
        update_user_meta( $user->ID, \'meta_key\', $gebruiker[\'email\'] );
    }
    else{
        $users = wp_insert_user(
            array(
            \'user_login\'    =>  $gebruiker[\'username\'],
            \'user_pass\'     =>  $gebruiker[\'password\'],
            \'first_name\'    =>  $gebruiker[\'first_name\'],
            \'last_name\'     =>  $gebruiker[\'last_name\'],
            \'user_email\'    =>  $gebruiker[\'email\'],
            \'display_name\'  =>  $gebruiker[\'first_name\'] . \' \' . $gebruiker[\'last_name\'],
            \'nickname\'      =>  $gebruiker[\'first_name\'] . \'\' . $gebruiker[\'last_name\'],
            \'role\'          =>  \'subscriber\'
            )                       
        );
        foreach ($data as $update_user) {   
            update_user_meta( $users, \'import_1\', $update_user[\'first_name\'] );
            update_user_meta( $users, \'import_2\', $update_user[\'last_name\'] );
        }
    }
}
将文件添加到wp_usermeta 我要使用的表update_user_metawp_insert_user 返回刚创建的用户的ID。

但不管我把update_user_meta 在循环中,它返回以下错误:Fatal error: Cannot use object of type WP_Error as array in
错误已修复。因为用户allready已经存在。所以需要稍后检查。这意味着字段被添加到usermeta中,但为空

======编辑========
以上代码是最终代码,正在运行。。。

2 个回复
最合适的回答,由SO网友:shyammakwana.me 整理而成

您可以使用wp_create_user 并传递必要的信息,如$username, $password, $email , 哪里$email 是可选的。

如果用户创建成功,它将返回ID 对于新创建的用户,other wise将返回错误对象。

然后使用更新用户的其他信息update_user_meta.

SO网友:Mehul Kaklotar

您可以使用CSV导入器/导出器库提取CSV文件数据并将其保存为用户详细信息。仅供参考-始终使用wordpress函数保存任何内容。对于ex。update_user_meta

您使用的Cron是正确的,应该正常运行。

用于提取CSV数据的库:goodby

编辑:

尝试在代码中添加错误处理:

//On success if( !is_wp_error($user) ) { echo "User created : ". $user; // update your meta here }

结束

相关推荐

Separate Profiles for Users

我在这里可能用错了“Profile”这个词,但在google搜索了两个小时后,结果为零。因此,查询如下-我们想建立一个网站,我们可以邀请作家写他们的文章,并能够编辑和张贴容易。我们使用插件和自定义代码的组合实现了这一点。我们继续做了一个/profile 当前登录用户可以查看其帖子、详细信息(用户名、电子邮件等)并可以在前端查看/编辑其文章的页面。现在的问题是-我们想给每个注册用户提供自己的个人资料,任何其他用户都可以访问,阅读他的“关于我”部分,查看他的帖子等。简而言之,我们希望每个用户都有自己的个人资料