保护Woocommerce中其他用户的退货和保修请求

时间:2018-07-14 13:08:41

标签: php wordpress woocommerce endpoint account

是否有任何方法可以保护WooCommerce Returns & Warranty Requests插件的请求/状态页面(我创建的页面的标签为“退货”)免受订单号或保修请求号也不属于用户的保护?

在默认模式下,该页面对公众开放,因此即使访问者访问此URL, ... / my-account / returns /?order = 35 仍可以查看所有保修请求详细信息原始用户要求的内容,有什么方法可以保护此页面?我想使用一个代码来检查用户是否未登录以及订单号或保修请求号是否不属于已登录用户,然后不显示/ returns /页面。

我能够在我的functions.php中使用此代码,以防止未登录的用户看到/ returns /页面:

function template_redirect_returns()
{
    if( is_page(returns) && !is_user_logged_in() )
    {
        $loginUrl = home_url('/my-account/orders/');
        wp_redirect($loginUrl);
         exit();
    }
}
add_action( 'template_redirect', 'template_redirect_returns' );

但是如果?order = 35 不属于他们,我又如何防止用户看到该页面?

我询问了插件开发人员,并报告了许多错误,但他们并不愿意解决问题。

感谢您的帮助!感激不尽。

1 个答案:

答案 0 :(得分:1)

在您的代码中,is_page(returns)应该替换为is_page('returns'),因为它会引发错误。

尝试以下操作(未经测试):

add_action( 'template_redirect', 'template_redirect_returns' );
function template_redirect_returns()
{
    if( is_page('returns') ) { 
        if( ! is_user_logged_in() ) {
            wp_redirect( home_url('/my-account/') ); //  instead of '/my-account/orders/'
             exit();
        }
        // For logged in users
        else {
            // Testing if current user ID match with order customer ID
            if( isset($_GET['order']) && get_post_meta( $_GET['order'], '_customer_user', true ) != get_current_user_id() ){
                wp_redirect( home_url('/my-account/orders/') );
                exit();
            }
        }
    }
}
  

这是此插件中的真正安全漏洞,应通知作者