1

我正在尝试使用以下代码首先检查用户是否具有特定的会员级别,然后检查他们是否在 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. 免费用户看到升级链接

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

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

编辑

我能够使用 print_r 并在它假设回显注册链接的页面上 - Array ( [1] => stdClass Object ( [userblog_id] => 1 [blogname] => mysite.com [domain] => mysite.com [路径] => / [site_id] => 1 [siteurl] => https://mysite.com [存档] => 0 [垃圾邮件] => 0 [已删除] => 0 ) )

4

3 回答 3

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 
     } 
?>
于 2013-09-13T14:18:21.257 回答
0

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

编辑:无耻地偷走了@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;
}
于 2013-09-13T14:15:47.280 回答
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 } ?>
于 2013-09-11T21:33:41.610 回答