多个 IF php 和 2 个其他语句


Multiple IF php with 2 else statements

我正在尝试使用以下代码来第一次检查用户是否具有某个成员级别,然后他们是否在wp网络上有博客。如果它们通过了这两项检查,则回显一个链接,如果他们没有通过第一个 if 检查,则回显另一个链接。另外,我正在尝试检查他们是否通过了第一个如果但第二个失败,然后回显了不同的链接。这是我现在拥有的代码 -

    <?php
if(pmpro_hasMembershipLevel(array(2,4))) { 
    if(current_user_can( 'edit_posts' )) {
        global $current_user;
        $blogs = get_blogs_of_user( $current_user->id );
        if($blogs) {
            foreach ( $blogs as $blog ) {
                if($blog->userblog_id != 1) { 
                    echo '<li><a href="http://' . $blog->domain . $blog->path .'wp-admin/">My Site</a></li>';
                } else {
                    echo '<li><a href="/register-site/">Register your Site</a></li>';  
                }
            }
        }
    } 
} else {  
    echo '<li><a href="/membership-levels/">UPGRADE</a></li>';
}
?>

上面的代码在假设时回显注册链接,但是当用户有博客时,注册链接不应该显示,但现在它显示在我的网站链接旁边。有什么想法吗?

编辑

  1. 免费用户看到升级链接

  2. 没有站点的高级用户会看到一个注册链接(2,4的成员数组是他们必须是其中之一的级别)

  3. 拥有站点的高级成员将看到"我的站点"链接。

编辑

我能够使用该print_r并在应该回显寄存器链接的页面上 - 数组

( [1] => stdClass 对象 ( [userblog_id] => 1 [博客名称] => mysite.com [域] => mysite.com [路径] =>/[site_id] => 1 [站点网址] => https://mysite.com [存档] => 0 [垃圾邮件] => 0 [已删除] => 0 ) ) )

查看 Wordpress MU 文档,我猜get_blogs_of_user总是返回一个数组,因此检查 $blogs 存在的值总是会返回 true。在下面的代码中,我建议用检查替换对值是否存在的简单检查,以确定返回的值是否是数组,如果是,它是否有元素:

<?php 
     if (pmpro_hasMembershipLevel(array(2,4))) { 
        if (current_user_can( 'edit_posts' )) :
             global $current_user;
             $blogs = get_blogs_of_user( $current_user->id );
             /*Check if we got an array back and, if so, 
               check if it has elements*/
             if ( is_array($blogs) && ( count($blogs) > 0 ) ) {
                foreach ( $blogs as $blog ) :
                    if($blog->userblog_id != 1) { 
                        echo '<li><a href="http://' . $blog->domain 
                            . $blog->path
                            .'wp-admin/">My Site</a></li>';
                    }
                 endforeach; // end foreach loop
             } else {
                echo '<a href="/register-site/">Register your Site</a>';
             } // end if $blogs
         endif; // endif current_user_can
      } else {   
?>
    <div>UPGRADE</div>
<?php 
     } 
?>

试试这个:

<?php if(pmpro_hasMembershipLevel(array(2,4))) { 
if(current_user_can( 'edit_posts' )) {
global $current_user;
$blogs = get_blogs_of_user( $current_user->id );
if($blogs) {
         foreach ( $blogs as $blog ) {
                if($blog->userblog_id != 1) { 
                    echo '<li><a href="http://' . $blog->domain . $blog->path .'wp-admin/">My Site</a></li>';
                }   
            }   
    } else {
                echo '<a href="/register-site/">Register your Site</a>'; 
           }
   } 
} else {   ?>
 <div>UPGRADE</div>
<?php } ?>

试一试。即使它在当前状态下不起作用,也应该更容易看到逻辑并找出无法正常工作的地方。

编辑:无耻地窃取了@JustinPearce检查用户是否从他的答案中有博客的方法

<?php
global $current_user;
$blogs = get_blogs_of_user( $current_user->id );
// print_r($blogs);
$has_membership_level = pmpro_hasMembershipLevel(array(2,4));
$has_blog = ( current_user_can('edit_posts') && is_array($blogs) && count($blogs) > 0 );
$registerLink = '<a href="/register-site/">Register your Site</a>';
$upgradeLink = '<div>UPGRADE</div>';
function echoBlogLinks($blogs) {
    echo '<ul>';
    foreach ( $blogs as $blog ) {
        if($blog->userblog_id != 1) { 
            echo '<li><a href="http://' . $blog->domain . $blog->path .'wp-admin/">My Site</a></li>';
        }
    }
    echo '</ul>';
}
if ($has_membership_level) {
    if ($has_blog) {
        echoBlogLinks($blogs);
    } else {
        echo $registerLink;
    }
} else {
    echo $upgradeLink;
}