Php 禁止直接访问WordPress中的页面

Php 禁止直接访问WordPress中的页面,php,wordpress,Php,Wordpress,我需要一些帮助。我试图阻止直接访问我的客户在结账后被重定向到的页面。我希望只有在结帐后才能访问该页面 我发现这个话题: 我将以下代码片段放在我的functions.php中: add_action('template_redirect', function() { // ID of the redirect page if (!is_page(2072)) { return; } // URL of checkout page if (w

我需要一些帮助。我试图阻止直接访问我的客户在结账后被重定向到的页面。我希望只有在结帐后才能访问该页面

我发现这个话题:

我将以下代码片段放在我的functions.php中:

add_action('template_redirect', function() {
    // ID of the redirect page
    if (!is_page(2072)) {
        return;
    }

    // URL of checkout page
    if (wp_get_referer() === 'https://www.exampledomain.com/checkout/') {
        return;
    }

    // we are on thank you page
    // visitor is not coming from form
    // so redirect to home
    wp_redirect(get_home_url());
    exit;
} );
如果客户通过Stripe付款,则此功能可以正常工作。但是,如果客户选择通过PayPal付款,则无法正常工作,因为PayPal会将客户重定向到其网站进行付款


这里可以做些什么来解决这个问题吗?

您可以用另一种方法来解决。仅接受预定义URL的数组。例如,在这里我们定义了一个数组,其中github和stackoverflow作为仲裁。如果引用的url不是这两个url中的一个,那么我们将终止该进程。使用
wp_die()
我们可以显示自定义消息和反向链接,使用
header()
我们可以在
3秒后自动重定向

add_action( 'wp', function() {
  if( is_page( '3975' ) && ! is_admin() ) { // restrict page ID '2072' if it's on the front end and if user doesn't have the permissions
    $base = [ // allowed referees
      'https://github.com/', // referee 1
      'https://stackoverflow.com/', // referee 1 ... and so on
    ];
    if( ! in_array( $_SERVER['HTTP_REFERER'], $base ) ) { // if not in referees
      header( 'Refresh: 3; ' . esc_url( home_url() ) ); // redirect in 3 seconds
      wp_die( 'Something went wrong.', NULL, $args = array( 'back_link' => true, ) ); // kills WordPress execution and displays an HTML page with an error message
      exit; // terminate the current script
    };
  };
} );
我看了很多东西
wp\u get\u referer()
不能这样使用,因为它是特定于Wordpress的

\u wp\u http\u referer
或http referer检索referer。如果与当前请求URL相同,则返回false


我使用的是
$\u服务器['HTTP\u REFERER']
。我认为
wp\u get\u referer()
会做什么工作。

那是什么样的页面?这是一个表单页面,用于收集有关客户订单的更多详细信息。只有购买了套餐的客户才能访问此表单并提交其详细信息。Hi@amarinediary。谢谢你的回答。在这段代码中,我应该在哪里定义我试图阻止访问的页面?is_page(2072)`是你想要保护的页面吗?正确。这是我希望只有在结帐后才能访问的页面的ID。我编辑了此帖子以将您的页面考虑在内。这似乎可以做到,但我不是PHP专家。您还可以检查最新订单的状态,并基于此允许用户查看页面或不查看页面。谢谢。它似乎起作用了。