用我自己的自定义表单替换woothemes-sensei中的表单

时间:2017-02-15 02:37:54

标签: wordpress woocommerce action hook-woocommerce

在此图片中:enter image description here

它显示了我想要实现的内容,完全替换了一个从php页面构建的html。

这是在绿色方块中创建表单和按钮的代码( functions.php ):

function insert_custom_form_start (){

//echo '
    ?>
                        <p class="form-row form-row-wide">
                            <input type="text" class="input-text" name="sensei_reg_username" placeholder="<?php _e( "gebruikersnaam", "woothemes-sensei" ); ?>" id="sensei_reg_username" value="<?php if ( ! empty( $_POST["sensei_reg_username"] ) ) echo esc_attr( $_POST["sensei_reg_username"] ); ?>" />
                        </p>

                        <p class="form-row form-row-wide">
                            <input type="email" class="input-text" name="sensei_reg_email" placeholder="<?php _e( "Email adres", "woothemes-sensei" ); ?>" id="sensei_reg_email" value="<?php if ( ! empty( $_POST["sensei_reg_email"] ) ) echo esc_attr( $_POST["sensei_reg_email"] ); ?>" />
                        </p>

                        <p class="form-row form-row-wide">
                            <input type="password" class="input-text" name="sensei_reg_password" placeholder="<?php _e( "wachtwoord", "woothemes-sensei" ); ?>" id="sensei_reg_password" value="<?php if ( ! empty( $_POST["sensei_reg_password"] ) ) echo esc_attr( $_POST["sensei_reg_password"] ); ?>" />
                        </p>

                        <!-- Spam Trap -->
                        <div style="left:-999em; position:absolute;"><label for="trap"><?php _e( "Anti-spam", "woothemes-sensei" ); ?></label><input type="text" name="email_2" id="trap" tabindex="-1" /></div>
<?php
                        //';

}

function insert_custom_form_end (){
    echo'</div> <!-- end #main -->';
    echo'</div> <!-- end #primary -->';
}
add_action('register_form','insert_custom_form_start', 10);
add_action('sensei_register_form_end','insert_custom_form_end', 10);

在这篇文章中我尝试删除旧表单,所以现在只显示新表单( functions.php ):

add_action('sensei_register_form_start','removeOldRegisterForm', 10);
function removeOldRegisterForm(){
    echo '<h3>remove old register form and button</h3>';

    remove_action( 'sensei_after_main_content','sensei_register_form_start', 10 );
    remove_action( 'sensei_after_main_content','sensei_register_form_end', 10 );

    //remove_option( 'users_can_register'); //removes all forms instead of just the first one
}

不幸的是,我似乎无法让删除操作工作,也许我不完全理解添加和删除钩子的工作原理。

人们已经建议我创建一个单独的登录页面,然后将其重定向到我的课程&#39;页面(如果用户已登录,则不会显示登录/注册表单)。但我认为这有点多余,我只想用更好看的形式替换它,而不是通过各种解决方法使网站效率低下。

如果我应该提供额外信息,请告诉我!

ps:来自&#39; class-sensei-frontend.php&#39;的代码我试图摆弄如下:

if ( get_option('users_can_register') ) {

                // get current url
                $action_url = get_permalink();

                ?>

                <div class="col-2">
                    <h2><?php _e( 'Register', 'woothemes-sensei' ); ?></h2>

                    <form method="post" class="register"  action="<?php echo esc_url( $action_url ); ?>" >

                        <?php do_action( 'sensei_register_form_start' ); ?>

                        <p class="form-row form-row-wide">
                            <label for="sensei_reg_username"><?php _e( 'Username', 'woothemes-sensei' ); ?> <span class="required">*</span></label>
                            <input type="text" class="input-text" name="sensei_reg_username" id="sensei_reg_username" value="<?php if ( ! empty( $_POST['sensei_reg_username'] ) ) echo esc_attr( $_POST['sensei_reg_username'] ); ?>" />
                        </p>

                        <p class="form-row form-row-wide">
                            <label for="sensei_reg_email"><?php _e( 'Email address', 'woothemes-sensei' ); ?> <span class="required">*</span></label>
                            <input type="email" class="input-text" name="sensei_reg_email" id="sensei_reg_email" value="<?php if ( ! empty( $_POST['sensei_reg_email'] ) ) echo esc_attr( $_POST['sensei_reg_email'] ); ?>" />
                        </p>

                        <p class="form-row form-row-wide">
                            <label for="sensei_reg_password"><?php _e( 'Password', 'woothemes-sensei' ); ?> <span class="required">*</span></label>
                            <input type="password" class="input-text" name="sensei_reg_password" id="sensei_reg_password" value="<?php if ( ! empty( $_POST['sensei_reg_password'] ) ) echo esc_attr( $_POST['sensei_reg_password'] ); ?>" />
                        </p>

                        <!-- Spam Trap -->
                        <div style="left:-999em; position:absolute;"><label for="trap"><?php _e( 'Anti-spam', 'woothemes-sensei' ); ?></label><input type="text" name="email_2" id="trap" tabindex="-1" /></div>

                        <?php do_action( 'sensei_register_form_fields' ); ?>
                        <?php do_action( 'register_form' ); ?>

                        <p class="form-row">
                            <input type="submit" class="button" name="register" value="<?php _e( 'Register', 'woothemes-sensei' ); ?>" />
                        </p>

                        <?php do_action( 'sensei_register_form_end' ); ?>

                    </form>
                </div>
                <?php
            }
            ?>
            </div>
        </div>

登录表单功能:

     public function sensei_login_form() {
                ?>
                <div id="my-courses">
                    <?php Sensei()->notices->mayb

e_print_notices(); ?>
                <div class="col2-set" id="customer_login">

                    <div class="col-1">
                        <?php
                        // output the actual form markup
                        Sensei_Templates::get_template( 'user/login-form.php');
                        ?>
                    </div>

                <?php
                if ( get_option('users_can_register') ) {

                    // get current url
                    $action_url = get_permalink();

                    ?>

                    <div class="col-2">
                        <h2><?php _e( 'Register', 'woothemes-sensei' ); ?></h2>

                        <form method="post" class="register"  action="<?php echo esc_url( $action_url ); ?>" >

                            <?php do_action( 'sensei_register_form_start' ); ?>

                            <p class="form-row form-row-wide">
                                <label for="sensei_reg_username"><?php _e( 'Username', 'woothemes-sensei' ); ?> <span class="required">*</span></label>
                                <input type="text" class="input-text" name="sensei_reg_username" id="sensei_reg_username" value="<?php if ( ! empty( $_POST['sensei_reg_username'] ) ) echo esc_attr( $_POST['sensei_reg_username'] ); ?>" />
                            </p>

                            <p class="form-row form-row-wide">
                                <label for="sensei_reg_email"><?php _e( 'Email address', 'woothemes-sensei' ); ?> <span class="required">*</span></label>
                                <input type="email" class="input-text" name="sensei_reg_email" id="sensei_reg_email" value="<?php if ( ! empty( $_POST['sensei_reg_email'] ) ) echo esc_attr( $_POST['sensei_reg_email'] ); ?>" />
                            </p>

                            <p class="form-row form-row-wide">
                                <label for="sensei_reg_password"><?php _e( 'Password', 'woothemes-sensei' ); ?> <span class="required">*</span></label>
                                <input type="password" class="input-text" name="sensei_reg_password" id="sensei_reg_password" value="<?php if ( ! empty( $_POST['sensei_reg_password'] ) ) echo esc_attr( $_POST['sensei_reg_password'] ); ?>" />
                            </p>

                            <!-- Spam Trap -->
                            <div style="left:-999em; position:absolute;"><label for="trap"><?php _e( 'Anti-spam', 'woothemes-sensei' ); ?></label><input type="text" name="email_2" id="trap" tabindex="-1" /></div>

                            <?php do_action( 'sensei_register_form_fields' ); ?>
                            <?php do_action( 'register_form' ); ?>

                            <p class="form-row">
                                <input type="submit" class="button" name="register" value="<?php _e( 'Register', 'woothemes-sensei' ); ?>" />
                            </p>

                            <?php do_action( 'sensei_register_form_end' ); ?>

                        </form>
                    </div>
                    <?php
                }

1 个答案:

答案 0 :(得分:0)

在我看到更多代码以及您想要完成的任务后,您应该如何完成此更改。可能有一个钩子供您使用(我知道Woocommerce很好,但不是Sensei),但另一种(或唯一/最佳)方法是在您的主题中创建一个名为sensei的文件夹,在其中创建一个名为user的文件夹,然后在其中放置一个名为login-form.php的文件。所以你的主题目录看起来像这样:

functions.php
sensei/
 user/
  login-form.php
style.css

login-form.php中,输入您想要的任何表单代码。这将覆盖wp-content/plugins/sensei/templates/user/login-form.php中的默认Sensei模板。从技术上讲,您应该将login-form.php文件复制到主题的sensei/user/login-form.php文件中,然后替换表单代码。这样,您可以维护该文件中的所有其他挂钩。

请注意,插件结构包含sensei/templates/user/login-form.php,但您的结构包含模板文件夹。

旁注:此方法适用于插件模板文件夹中的所有其他文件。事实上,这正是它所针对的 - 所以你可以使用钩子,过滤器和原始模板文件的组合来完全自定义它。