从MVC后台向WordPress注册用户的最佳实践

时间:2014-07-11 作者:JamesG

好的,所以我过去经常在Wordpress中开发,但去年一直在使用Codeigniter。显然,有时Codeigniter比Wordpress更适用于某种情况,反之亦然,但我不得不在下一个项目中使用Wordpress。

有了MVC,让所有的“回声”出现在视图中,让所有的处理出现在控制器中,这是非常有意义的。。但现在回到Wordpress,我觉得函数内部的回声很奇怪。

我正在制作一个注册页面(大部分代码来自here 但我还没有将其更改为自定义字段等),其中HTML位于模板页面中,带有do_action (\'process_customer_registration_form\'); 所有的处理和回声都是在功能上完成的。php:

    function registration_process_hook() {
    if (isset($_POST[\'adduser\']) && isset($_POST[\'add-nonce\']) && wp_verify_nonce($_POST[\'add-nonce\'], \'add-user\')) {

        // die if the nonce fails
        if ( !wp_verify_nonce($_POST[\'add-nonce\'],\'add-user\') ) {
            wp_die(\'Sorry! That was secure, guess you\\\'re cheatin huh!\');
        } else {
            // auto generate a password
            $user_pass = wp_generate_password();
            // setup new user
            $userdata = array(
                \'user_pass\' => $user_pass,
                \'user_login\' => esc_attr( $_POST[\'user_name\'] ),
                \'user_email\' => esc_attr( $_POST[\'email\'] ),
                \'role\' => get_option( \'default_role\' ),
            );
            // setup some error checks
            if ( !$userdata[\'user_login\'] )
                $error = \'A username is required for registration.\';
            elseif ( username_exists($userdata[\'user_login\']) )
                $error = \'Sorry, that username already exists!\';
            elseif ( !is_email($userdata[\'user_email\'], true) )
                $error = \'You must enter a valid email address.\';
            elseif ( email_exists($userdata[\'user_email\']) )
                $error = \'Sorry, that email address is already used!\';
            // setup new users and send notification
            else{
                $new_user = wp_insert_user( $userdata );
                wp_new_user_notification($new_user, $user_pass);
            }
        }
    }

    if ( $new_user ) : ?>
    <p class="alert"><!-- create and alert message to show successful registration -->
    <?php
        $user = get_user_by(\'id\',$new_user);
        echo \'Thank you for registering \' . $user->user_login;
        echo \'<br/>Please check your email address. That\\\'s where you\\\'ll recieve your login password.<br/> (Be sure to check your spam folder)\';
    ?>
    </p>
    <?php else : ?>

        <?php if ( $error ) : ?>
            <p class="error"><!-- echo errors if users fails -->
                <?php echo $error; ?>
            </p>
        <?php endif; ?>

    <?php endif;

}
add_action(\'process_customer_registration_form\', \'registration_process_hook\');
我的问题是。。。在WP中,最好的做法是让内容在一个动作函数中回响,就像在这个函数的末尾一样?为什么不在同一页中设置一个标准if(isset(submit))情况并处理表单?我知道,通过将其移动到函数,它将分离逻辑,但它也在函数中响应。。似乎不对。

谢谢

1 个回复
最合适的回答,由SO网友:Rarst 整理而成

WordPress模板的基本构建块是模板标记,即函数回显(the_*()) 或返回(get_*()) 具体信息。与其他类型的模板相去甚远,最大的区别在于WP“context”通常要大得多,包含的内容较少,很少由开发人员直接控制。

WordPress中的表单工作流在历史上非常凌乱,大量的历史代码和API让每个人都叹为观止(比如设置API)。

简而言之,您的目标应该是以一种方便且可维护的方式对其进行设计,因为WP几乎没有提供任何指导。

回答问题的直接部分-是的,WP函数回送是完全正常的,可以直接以模板标记方式调用,也可以在挂钩中使用,用于其他输出。

结束

相关推荐

How can I find plugins' slug?

我想知道如何才能找到插件的slug(slug=WordPress用来更新插件和确定哪些插件当前处于活动状态的内部名称)?它通常是插件的文件夹名,但如果插件没有文件夹,则是其文件名(如hello.php)。是否有其他例外情况?大小写字符重要吗</插件的slug是否可以与其文件夹名不同?如果有一个叫做hello的插件呢。php和另一个/您好。php/您好。php