多个IF php与2 else语句

时间:2013-09-11 20:53:56

标签: php wordpress if-statement echo

我正在尝试使用以下代码来检查用户是否具有某个成员级别,然后是否在wp网络上有博客。如果他们通过了这两个检查,那么一个链接被回显,如果他们没有通过第一个if 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. 免费用户可以看到UPGRADE链接

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

  3. 拥有网站的高级会员将看到“我的网站”链接。

  4. 修改

    我能够使用print_r并在页面上,它可以回显寄存器链接 - Array([1] =&gt; stdClass Object([userblog_id] =&gt; 1 [blogname] =&gt; mysite。 com [domain] =&gt; mysite.com [path] =&gt; / [site_id] =&gt; 1 [siteurl] =&gt; https://mysite.com [archived] =&gt; 0 [spam] =&gt; 0 [删除] =&gt; 0))

3 个答案:

答案 0 :(得分:1)

查看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 
     } 
?>

答案 1 :(得分:0)

试试这个:

<?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 } ?>

答案 2 :(得分:0)

给这个人一个机会。即使它在当前状态下不起作用,也应该更容易看到逻辑并弄清楚什么不能正常工作。

编辑:无耻地偷走@JustinPearce检查用户是否有来自his answer

的博客的方法
<?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;
}