私はWordPressをディレクトリサイトとして使っています。そこではユーザーが投稿を投稿でき、それが彼らの広告/リストになります。ユーザーには、カスタムのワードプレスロールが割り当てられています。
投稿は管理者によって一度承認され、公開される必要があります、そしてそれから彼らは彼らが適切と思うように自由に自分の投稿を更新することができます。カスタムロールには公開機能を割り当てていないので、現時点ではこれでうまくいきます。
ただし、必要に応じてユーザーが自分の投稿をオフライン(おそらくドラフト)にして、いつでも公開できるようにする機能も必要です。現在、投稿を「ドラフト」にしたときに、再度公開するにはレビューのために送信する必要があります。これは理想的ではありません。
承認を必要とせずに、投稿をpublished
からdraft
に変更してから再びdraft
からpublished
に戻すことができるように、これを回避する方法はありますか?
それとも、私は彼らに最初に公開機能を与えますが、彼らの最初の投稿が承認されることを要求するプラグインがありますか? (彼らはとにかく1ポストのみ許可されています)。
投稿が公開されるかどうかを制御するチェックボックス付きのカスタムメタボックスについてはどうですか。残念ながら、このようなif機能でどこから始めればよいのかわかりません。私は他のメタボックスにもWPALchemyを使っています。
その場で能力を割り当てるというクリスの提案のおかげで、私は他の誰かを助けるかもしれない何かを働かせることができました。もっと良い方法があるかもしれませんが、これは私の状況ではうまくいきます。
私はカスタム投稿タイプlisting
で作業しているので、マッピングされたケーパビリティpublish_listings
をユーザーに割り当てる必要がありましたが、承認された後に限られます。私がこれを行うことを考えることができる最もよい方法は管理者だけが見ることができるカスタム投稿スクリーンに「管理者専用」メタボックスを含めることでした。これはWPAlchemy
の助けを借りて行われ、それはoutput_filter
です。
管理者だけが見ることができるメタボックスで、私は簡単なチェックボックスを追加しました。チェックすると、投稿が更新され、現在の投稿の作者にpublish_listings
機能が追加されます。一種のディレクトリサイトなので、私の場合は著者1人につき1件の投稿しか許可していないので、これはかなりうまくいきます。チェックを外して更新すると、機能は削除されます。そのため、ユースケースは次のようになります。
私が述べたように、私はメタボックスの重い処理にWPAlchemyを使っているので、投稿が更新されたときにsave_filter
を使って機能を追加することができました。
function save_admin_only( $meta, $post_id ) {
global $post;
//get the author ID of the post we're on
$author_id = $post->post_author;
$id = get_the_author_meta( 'ID' , $author_id );
$user = new WP_User( $id ); //retrieves the user, based on their ID specified above for user with WP_User class
if($meta['_can_publish'] == 'yes') {
$user->add_cap( 'publish_listings' ); //assign capability to this user if checkbox is ticked
}
else { $user->remove_cap( 'publish_listings' ); } //otherwise remove the capability so they can not publish
return $meta;
}
カスタム投稿タイプをチェックする必要がある場合(複数ある場合)、次のコードでラップすることができます。
if ( 'other_post_type' == get_post_type() ) {
...
}
これは、まったく新しい役割を作成するのではなく、単にユーザーにいくつかの機能を付与する必要がない他のシナリオでは非常に役立つ可能性があるようです。誰もが上記のことを改善することができるならば、してください。
私は最近、まったく同じ問題を扱っていました。私はそれを解決しなかった、そして我々は人々が彼らのリストのために比較的大きな合計を払わなければならなかったので彼らが悪いものを投稿しないために十分に刺激されるであろうと決めた。さらに、それぞれを手動で承認するのは面倒です - 人々は結果を得るために一日待つのを嫌います。
そのため、最初からdirectory_member
ユーザーレベルにpublish_posts
およびedit_published_posts
の機能を付与しました。投稿が公開される前に、支払いプロセスを経なければなりません。支払いが済んだら、投稿を使って必要なことをすべて実行できます。
しかし、私はあなたの質問を見ている(まれな)脳波を持っていました。私が間違ったところはdirectory_member
とdirectory_member
ではなくdirectory_member_approved
レベルが1つしかないことだと思います。後者はedit_published_posts
機能を持ちます。前者はしません。管理者が初めて投稿を公開したときにユーザーを登録するのは比較的簡単です。
もう1つの可能性は、ユーザーのメタフィールドに基づいて、edit_published_posts
またはどこかでadmin_init
機能をオンザフライで割り当てることです。しかし、どういうわけか私は2つの明示的なレベルを持つという考えがより良いと思います。
あなたがしたことを教えてください。