有没有办法停止直接执行single-product.php

时间:2016-03-03 10:58:58

标签: php wordpress woocommerce

由于下面解释的原因,我不想让用户直接访问single-product.php。我的意思是用户不应该能够直接访问链接http://example.com/product/product-1/

此人只能通过点击链接从该网站访问此链接。

有可能???

原因

客户有一个产品,他想在4个区域销售,他不想看起来像eccomerce的网站

  1. UK
  2. US
  3. 欧洲(所有国家/地区)
  4. 印度
  5. 对于所有运输地点免费但价格不同的地方

    流程直到英国,美国和美国。印度---

    在主页上,用户被要求选择他想要装运的国家。

    因此,用户访问特定于该国家/地区的单个产品的页面。现在选择产品数量并将其添加到购物车。如果之前有任何内容并且重定向到结帐页面,那么购物车就会被清空。

    在英国,美国,印度的情况下,我已经分为三类产品(根据国家代码的类别名称)。

    然后根据购物车中产品的类别,在发货页面上预选国家/地区。

    但就欧洲而言,制造产品和制造产品的过程过于繁琐。欧洲所有国家的类别,因为整个欧洲的价格相同。

    所以我计划在主页上选择一个选项,其值为国家/地区代码。然后根据该值,我们可以在结帐页面上预先选择国家/地区。

    但是现在只有用户不应该被允许直接访问。 感谢

4 个答案:

答案 0 :(得分:1)

试试这个:(在current_theme_folder / functions.php

function check_authorization() {
    if(is_single())
    {
        if($_POST){
            //AUTHORIZE
        }else{
            //UN AUTHORIZE
        }
    }
}
add_action('init', 'check_authorization');

答案 1 :(得分:1)

简短的回答是:。没有100%万无一失的方法可以做到这一点。 HTTP_REFERRER和使用会话不保证用户无法访问该URL(在经过身份验证之后,或者在自己形成发布请求之后,如果您决定仅允许POST)。如果存在URL,并且人们可以从您的应用程序中跟踪它,则有人可以直接在浏览器中访问它或构建检索它的请求。

当然,您可以使用该请求传递URL中的一些变量(同样,它不是您要求的),并使url成为临时的,将基于时间的令牌插入到数据库中,这将在一段时间后使该URL无效。但这是另一个话题,还有其他方法,但它们与你提出的问题无关。我只是指着你为你的问题寻找不同的解决方案。

然而,主要问题仍未得到答案:你为什么需要这个?如果用户可以从您的应用程序访问该URL,并且您在那里获得了该URL,则无需避免直接访问相同的URL。

修改 现在您已经主要重写了原始问题,并且您希望拥有基于国家/地区的产品,您只需在网址中包含区域设置,并且产品将在不同区域具有不同的属性。与http://example.com/uk/producthttp://example.com/it/product一样。我不确定这是否是你要找的。

你也可以让你的国家参与进来,每个人的网址都是一样的。

但请记住,如果在美国可以访问URL,则无法阻止欧洲用户访问它。除非您执行一些ip-to-country映射,否则您将自动检测客户端的IP,并限制其访问其他区域。同样,这种技术可以使用VPN和代理来克服,因此不是100%可行的解决方案。

答案 2 :(得分:0)

您可以使用$ _SERVER [' HTTP_REFERER']环境变量来检查请求是否来自您的网站。

答案 3 :(得分:0)

是的,有可能这样做

  • 您可以设置会话,当用户直接访问产品页面时,您可以验证会话是否存在,但这可能不是很好。

  • 您可以使用

    查看用户来自哪里

    $_SERVER['HTTP_REFERER']

所以你可以知道他是来自正确的地方,还是直接访问该页面。

  • 另一种方式是,将您的产品链接放在一个类型为post的表单上,并在其上加上一些隐藏的值,如id或name,然后在产品页面上,您可以检查用户是否来自正确的页面:< / p>

    if($_POST['url_link'])
    {
    
      print("Correct url")
    
    }else{
        redirect("Host URL")
    }