首页 > 解决方案 > 如何从表单中获取价值并在 WordPress 的 functions.php 文件中对其进行处理?

问题描述

我正在尝试提交一个发布数据的表单,然后在 functions.php 文件上处理这些数据。详细来说,我的表单非常简单,在 Woo-commerce 日志记录页面中有一个按钮供用户单击,如果他/她想继续作为访客。

我试图遵循这里的建议。

这是我在 form-login.php 中创建的表单:

<form class="woocommerce-form woocommerce-form-login login" method="post" action="<?php echo esc_url( wc_get_checkout_url() );?>">
                <p class="woocommerce-FormRow form-row">
                    <input type="hidden" name="guest" value="guest" />
                    <input class="woocommerce-Button button" type="submit" name="continue_as_guest" value="Continue as guest" />
                </p>
</form> 

这是在functions.php中添加的源代码:

function redirect_pre_checkout() {
    $redirect_page_id = 21;
    if ( ! is_user_logged_in() && is_checkout() && ($_REQUEST['continue_as_guest'] !== 'guest') ) {
        wp_safe_redirect( get_permalink( $redirect_page_id ) );
        die;
    } elseif($_REQUEST['continue_as_guest'] == 'guest') { 
        wp_safe_redirect( get_permalink( wc_get_page_id( 'checkout' ) ) );
        die;
    }
}.
add_action( 'template_redirect', 'redirect_pre_checkout' );

id 等于 21 的页面是登录页面,并且开启了访客结账的 Woo-commerce 选项。因此,逻辑是如果用户未登录并且用户正在结帐并且用户没有选择以访客身份继续,则将用户重定向到登录页面。不同的是,如果用户选择继续作为访客,则将他重定向到结帐页面。

不幸的是,这不起作用,因为 $_REQUEST['continue_as_guest'] 没有获得价值(客人)。你能帮忙吗?

标签: phphtmlwordpresswoocommerce

解决方案


我认为函数应该更像这样:

function redirect_pre_checkout() {
    $redirect_page_id = 21;
    if ( ! is_user_logged_in() && is_checkout() && !isset( $_POST['continue_as_guest']) ) {
        wp_safe_redirect( get_permalink( $redirect_page_id ) );
        die;
    } elseif( isset( $_POST['continue_as_guest']) ) { 
        wp_safe_redirect( get_permalink( wc_get_page_id( 'checkout' ) ) );
        die;
    }
}.
add_action( 'template_redirect', 'redirect_pre_checkout' );

推荐阅读