Php 限制wordpress多站点订阅者访问他们不在的站点上的内容';分配给

Php 限制wordpress多站点订阅者访问他们不在的站点上的内容';分配给,php,wordpress,advanced-custom-fields,multisite,Php,Wordpress,Advanced Custom Fields,Multisite,我们有一个Wordpress网站。我们有增值转销商,这些转销商已被批准为Wordpress用户,并作为订户分配到特定的网站,在那里他们可以访问其他人无法访问的营销材料。我已经在Wordpress网络管理员(选项卡)->用户(选项卡)中确认了这一点。我们有两个独立的营销材料网站,每个用户只分配到一个网站 要访问营销资料,用户进入合作伙伴页面,有一个带有链接的按钮将他们带到营销页面。按钮中的链接是根据用户是否登录动态生成的。如果他们是登录用户,则链接会转到营销页面,如果不是,则链接会转到注册/登录页

我们有一个Wordpress网站。我们有增值转销商,这些转销商已被批准为Wordpress用户,并作为订户分配到特定的网站,在那里他们可以访问其他人无法访问的营销材料。我已经在Wordpress网络管理员(选项卡)->用户(选项卡)中确认了这一点。我们有两个独立的营销材料网站,每个用户只分配到一个网站

要访问营销资料,用户进入合作伙伴页面,有一个带有链接的按钮将他们带到营销页面。按钮中的链接是根据用户是否登录动态生成的。如果他们是登录用户,则链接会转到营销页面,如果不是,则链接会转到注册/登录页面

我们最近发现,登录用户可以访问这两个站点上的营销资料,而不管他们被分配到哪个站点。目前,唯一无法访问营销资料页面的人是未登录的人

如果我理解代码,它所做的就是检查页面上是否有登录用户,然后在按钮中为他们提供营销页面的链接

我们使用高级自定义字段从页面上的不同字段获取信息,以帮助创建我们需要为按钮选择的两个链接。下面是设置插入的链接的php:

$portal_left_link  = get_field( 'portal_left_link' ); // the link for the marketing page

$register_global = get_field( 'register_login_link', 'option' ); // trying to find this value
$register_override = get_field( 'register_url_override' ); // trying to find this value

$register_login_link = ( ! empty( $register_override ) ) ? $register_override : $register_global; // not sure yet what this does
$register_login_link .= '?redirect_to=' . $portal_left_link; // concatenates a redirect for the (button) link to the portal page to be carried over to the register/sign-in page for when the user needs signs-in

$left_link = is_user_logged_in() ? $portal_left_link : $register_login_link; // i think this says if the user is logged in then give them the portal link, otherwise give them the register/sign-in link
以及代码被拉入的按钮:

<a href="<?php echo esc_url( $left_link ); ?>" class="btn">Login</a>

我需要的是检查以下各项的代码:

  • 如果有登录用户
  • 用户被分配到哪个站点
  • 用户所在的站点是否与分配给用户的站点匹配
  • 如果所有这些语句都匹配,则插入指向营销页面的链接
  • 否则,请插入指向注册/登录页面的链接
您可以使用此方法检查用户是否是站点的成员:

因此,您的代码可以如下所示:

$portal_left_link = get_field( 'portal_left_link' ); // the link for the marketing page
if (is_user_logged_in() && is_user_member_of_blog()) // check if the user is logged in and a member of the blog
{
    $left_link = $portal_left_link;
    $left_link_text = "Go To Marketing Page";
}
else
{
    $register_global = get_field( 'register_login_link', 'option' ); // trying to find this value
    $register_override = get_field( 'register_url_override' ); // trying to find this value
    $register_login_link = ( ! empty( $register_override ) ) ? $register_override : $register_global; // not sure yet what this does
    $register_login_link .= '?redirect_to=' . $portal_left_link; // concatenates a redirect for the (button) link to the portal page to be carried over to the register/sign-in page for when the user needs signs-in
    $left_link = $register_login_link;
    $left_link_text = "Login";
}
// code for button
<a href="<?php echo esc_url( $left_link ); ?>" class="btn"><?php echo $left_link_text; ?></a>
$portal_left_link=get_字段('portal_left_link');//营销页面的链接
if(is_user_logged_in()&&is_user_member_of_blog())//检查该用户是否已登录并且是blog的成员
{
$left\u link=$portal\u left\u link;
$left\u link\u text=“转到营销页面”;
}
其他的
{
$register\u global=get\u字段('register\u login\u link','option');//正在尝试查找此值
$register\u override=get\u字段('register\u url\u override');//正在尝试查找此值
$register\u login\u link=(!empty($register\u override))?$register\u override:$register\u global;//还不确定这是做什么的
$register\u login\u link.='?重定向到='。$portal\u left\u link;//连接到门户页面的(按钮)链接的重定向,以便在用户需要登录时转到注册/登录页面
$left\u link=$register\u login\u link;
$left\u link\u text=“Login”;
}
//按钮代码

下面我的回答解决了您根据他们是否是网站成员而显示/隐藏链接的请求。它不会阻止已经拥有链接的用户直接将其粘贴到浏览器中。如果您提供此营销页面的更多详细信息以及它的托管方式,我可以为您提供一些实际保护该页面的想法。我还可以对营销页面进行更改,因此只有登录的用户在被分配到该站点时才可以直接访问该页面。再次感谢。你一石二鸟,太棒了!这个问题的完美解决方案。解决了的。