twol’s diary

嵌ったことなど

BuddyPressで登録ユーザーからの投稿削除ができるリンクを作る

ことのはじめ

表題の通り。BuddyPressを導入すると、SNSのように閲覧者がユーザー登録をすると記事を投稿できるようになるが、デフォルトの権限グループが「購読者」となっているために、投稿できたとしても削除ができない。(で合ってる?)

そこで登録ユーザーであっても自分の投稿した記事を削除できるようにする。多分方法は2つあって、

  • 「購読者」グループに削除の権限を加える
  • デフォルトの権限グループを「購読者」以上に上げる(「編集者」とか?)

なのだけれども、これは前者(「購読者」グループに削除の権限を加える)の話。

ほうほう!

まず、User Role Editor というぷらぎんをインストールして有効化する。

これね。

f:id:twol:20160731005729p:plain

でもってWordPressの管理ツールの ユーザー > User Role Editor をクリックして、「購読者」になっていることを確認のうえ、 delete_published_posts にチェックを入れる。そして[Update]をクリツクして完了。

f:id:twol:20160731010306p:plain

テーマの方にはwordpressループ中に

<?php if (current_user_can( 'delete_post', $post->ID )) : ?>
    <p class="warning"><a onclick="return confirm('削除します。宜しいですか?')" href="<?php echo get_delete_post_link( $post->ID ) ?>">削除する</a></p>
<?php endif; ?>

とでも書いてあげる。生で <a onclick="return confirm('削除します。宜しいですか?')" href="<?php echo get_delete_post_link( $post->ID ) ?>">削除する</a> とかしてしまうと削除できないユーザーとかの場合にhref属性が空のa要素ができてしまうのでカコワルイ。

これで投稿した本人には削除用のリンクができる。同じ購読者権限でも投稿した本人出ない場合はそもそもget_delete_post_link( $post->ID )の結果が返らない・リンクを本人から送ってもらってアクセスしても削除が働かないので大丈夫。ちなみに管理者権限とかでも削除リンクは出てきて押せるよ。

おわりに!

もしこの通りやってできなかったらコメントください。心当たりあるので…