如何访问插件中的用户元数据

时间:2013-09-07 作者:Vijay Rajasekaran

我正在尝试写一个插件。我已经使用插件成功地在注册表中添加了一个额外字段。我想检查额外字段中的值是否与任何已注册的用户名匹配。

当我尝试使用预定义的usermeta函数进行验证时。我发现以下错误:

require( \'C:\\wamp\\www\\cpa\\wp-load.php\' )
require_once( \'C:\\wamp\\www\\cpa\\wp-config.php\' )
require_once( \'C:\\wamp\\www\\cpa\\wp-settings.php\' )
我可以在主题模板中完成这项工作。但我想知道如何像在主题文件中一样,在插件中访问WordPress的所有预定义功能。

代码:

//1. Add a new form element...

$referral_username = $_REQUEST[\'referral\'];

add_action(\'register_form\',\'myplugin_register_form\');
function myplugin_register_form (){
    $referral_username = ( isset( $_POST[\'referral_username\'] ) ) ? $_POST[\'referral_username\']: \'\';
    ?>
    <p>
        <label for="referral_username"><?php _e(\'Referral Username\',\'mydomain\') ?><br />
            <input type="text" name="referral_username" id="referral_username" class="input" size="20"value="<?php echo $referral_username = $_REQUEST[\'referral\']; ?>" size="25" />



            </label>
    </p>
    <?php
}

//2. Add validation. In this case, we make sure referral_username is required.
add_filter(\'registration_errors\', \'myplugin_registration_errors\', 10, 3);
function myplugin_registration_errors ($errors, $sanitized_user_login, $user_email) {

    if ( empty( $_POST[\'referral_username\'] ) )
        $errors->add( \'referral_username_error\', __(\'<strong>ERROR</strong>: You must include a Valid Referral User Name. Else leave it blank.\',\'mydomain\') );

    return $errors;
}

//3. Finally, save our extra registration user meta.
add_action(\'user_register\', \'myplugin_user_register\');
function myplugin_user_register ($user_id) {
    if ( isset( $_POST[\'referral_username\'] ) )
        update_user_meta($user_id, \'referral_username\', $_POST[\'referral_username\']);
}


//Test Usermeta

$user = get_userdatabylogin(\'vijay\');
echo $user->ID; // prints the id of the user;

2 个回复
SO网友:Charles Clarkson

请看最后两行代码。我正在尝试打印用户的id。它可以在主题文件中使用,但不能在插件中使用。

//Test Usermeta

$user = get_userdatabylogin(\'vijay\');
echo $user->ID; // prints the id of the user;
在PHP中,在定义用户函数之前(通常)无法执行它。

插件正在执行get_userdatabylogin() 前编码get_userdatabylogin() 已定义为函数。

主题正在执行get_userdatabylogin() 代码get_userdatabylogin() 已定义为函数。

请咨询Plugin API (或aWP Hooks database 或搜索WordPress代码)以找到正确的操作名称。既然您已经知道代码在主题中起作用,那么您应该能够使用after_setup_theme 运行代码的操作。

add_action( \'after_setup_theme\', \'test_user_meta\' );
/**
 * Test User meta.
 */
function test_user_meta() {
    $user = get_userdatabylogin(\'vijay\');
    echo $user->ID; // prints the id of the user;
}

SO网友:Dr.Hariri

尝试将其添加到插件文件的顶部,然后重新测试:

require (ABSPATH . WPINC . \'/pluggable.php\');

结束

相关推荐