web-dev-qa-db-ja.com

永久削除コメントリンクを出力するにはどうすればいいですか?

フロントエンドに "コメントの削除"リンクを出力しようとしています。これが私のこれまでの試みです。

printf(
    '<a href="%s">%s</a>',
    wp_nonce_url(
        admin_url( "comment.php?c=$comment_id&action=deletecomment" ),
        'delete-comment_' . $comment_id
    ),
    __( 'Delete comment', 'text-domain' )
);

私はedit_comment capを作者の役割に追加しました。しかし、著者としてログインして[コメントの削除]をクリックすると、白い画面に次のメッセージが表示されます。

申し訳ありませんが、この投稿のコメントを編集することはできません。

WordPressで作成していただきありがとうございます。

バージョン4.7.4

どのように私は働く永久削除コメントリンクを出力することができますか?

3
henrywright

簡単にテストした後、OPのコードスニペットは動作しているようです:

printf(
    '<a href="%s">%s</a>',
    wp_nonce_url(
        admin_url( "comment.php?c=$comment_id&action=deletecomment" ),
        'delete-comment_' . $comment_id
    ),
    esc_html__( 'Delete comment', 'text-domain' )
);

しかし、authorのみがhir自身の投稿へのコメントを削除するようにしなければならないようです 、そうでない場合は、edit_others_postsおよびedit_published_postsprimitive機能を探します。

edit_commentprimitive機能ではないため、代わりに map_meta_cap() 関数を見て、primitive依存する機能。 edit_commentmeta機能であり、以下を使用していることがわかります。

$caps = map_meta_cap( 'edit_post', $user_id, $post->ID );

孤立していないコメント用。次に、edit_postメタ機能が他のprimitive機能にマッピングされる部分を調べる必要があります。そこに可能なマッピングはほとんどありません。 edit_others_postsおよびedit_published_postsprimitive機能へ。

ジャンガレアは、役割と能力に関するすばらしい 記事 を書いています。

  • プリミティブ機能はユーザーロールに割り当てられます。
  • メタ機能をロールに割り当てることはできません。
3
birgire