保护 Returns 和来自 Woocommerce 中其他用户的保修请求

Protect Returns & Warranty Requests from other users in Woocommerce

有什么方法可以保护 WooCommerce Returns & Warranty Requests 插件的 request/status 页面(我创建的页面的别名是 "returns"),避免订单号或保修请求号不存在的用户'你也属于吗?

在默认模式下,页面对 public 打开,因此,即使访问者访问此 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 不属于用户,我如何才能阻止用户看到该页面?

我问过插件开发人员,也报告了很多错误,但他们不关心解决问题。

非常感谢您的帮助!满怀感激。

在您的代码中,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();
            }
        }
    }
}

This is a real security bug in this plugin, and should be notified to authors.