1

次のコードを使用して、ユーザーが特定のメンバーレベルを持っているかどうかを最初に確認し、次に wp ネットワークにブログがあるかどうかを確認しようとしています。これらの両方のチェックに合格した場合、リンクがエコーされます。最初の if チェックに合格しなかった場合、別のリンクがエコーされます。また、最初に合格したかどうかを確認しようとしていますが、2番目に失敗した場合、別のリンクがエコーされます。これが私が今持っているコードです-

    <?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. サイトのないプレミアム ユーザーには、REGISTER リンクが表示されます (メンバーシップ配列 2,4 は、いずれかでなければならないレベルです)。

  3. サイトを持つプレミアム メンバーには、MY SITE リンクが表示されます。

編集

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

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 に答える