web-dev-qa-db-ja.com

WordPressのカスタム投稿タイプでauthor_can()を使用する

カスタムのロールと機能を使用して、テーマ内のコンテンツを条件付きで表示しようとしています。まず、カスタムロールを定義します。

add_role('free_vendor', 'Free Vendor Listing', array('read', 'edit_posts', 'delete_posts', 'display_map'));

これはfunctions.phpから直接実行されます(どこかのアクションに追加する必要がありますか?)

それから、条件付きで地図を表示するために定義したdisplay_map機能を使います。

if (author_can($post, 'display_map')) echo '<li><a href="#map">Map</a></li>';

唯一の問題は、うまくいかないということです。カスタム投稿タイプでauthor_can()を使用することに問題はありますか? add_role()を正しく呼びませんか?私はauthor_can()をVanilla投稿以外のものと一緒に使うことについてのまともな文書を本当に見つけることができません。これは不可能ですか?

1
user2579

add_roleについての最初の

これを一度だけ実行する必要があるので、それをfunctions.phpに貼り付けて保存した後は、削除して再度保存することができ、役割は常にそこにあります。

それからauthor_can関数については、私は本当に間違ったことを言うことができますので、私は本当にそれを使用することはありませんが、あなたはこのようにcurrent_user_can()関数を使用することができます:

更新

if ( is_user_logged_in() ) {
     //first you get the curent user info
     get_currentuserinfo();
     //then you can check capabilities like this
     if(current_user_can('display_map')){
      echo '<li><a href="#map">Map</a></li>';
      }
}

お役に立てれば

2
Bainternet

代わりに current_user_can() を使ってみてください。

1
Pippin

さて、これが起こっているようです。ロールを作成したときにロールに直接機能を追加してもうまくいかないようです(少なくとも私にとっては)。だから、これの代わりに:

add_role('free_vendor', 'Free Vendor Listing', array('read', 'edit_posts', 'delete_posts', 'display_map'));

それはこのようなものである必要があります:

$free_vendor_caps = array('read', 'edit_posts', 'delete_posts', 'display_map');
add_role('free_vendor', 'Free Vendor Listing');
$free_vendor = get_role('free_vendor');
foreach ($free_vendor_caps as $cap) {
    $free_vendor->add_cap($cap);
}

それから私はauthor_can()でする必要があることをすることができます:

<?php if (author_can($post->ID, 'display_map')) : ?>
<div id="map">
    <h3>Map</h3>
    <?php the_map(); ?>
</div>
<?php endif; ?>
0
user2579