この記事は最終更新日から2年以上が経過しており、情報が古くなっている可能性があります。

WP-MembersとWP Status Notifierというプラグインで作ります。
どういう仕組みの記事投稿サイトを作るかというと、下記の流れになります。

1 ユーザーがフォームページにて会員登録を行う。
2 会員登録の通知メールを受け取った管理者が承認を行い、ユーザーの権限を購読者から寄稿者へ変更する。
3 管理者が承認を行ったことでメールにてパスワードがユーザーへ送られる。これでユーザーは会員兼寄稿者となったので、プロフィールの編集と投稿(公開はできない)を行えるようになる。
4 ユーザーが投稿を行い管理者に通知メールが届く。管理者はユーザーが投稿した記事をレビューし、公開する。
なお、管理者がレビューした記事はユーザーが編集することはできなくなる。再度ユーザーが公開記事を編集したい場合は、管理者が記事のステータスを「公開済み」から「レビュー待ち」にする必要がある。

では実際に作っていきます。

1.会員登録機能
まずはWP-Membersをインストールします。するとWordPressダッシュボード画面の左側メニューバー設定ボタン内部にWP-Membersのオプション表示ボタンが生成されるので、それを押下します。
具体的な設定に関しては、恐らく見れば何となくわかるかと思いますが、とりあえず「オプション設定」画面の「管理者に通知」「承認登録」の2つのチェックボックスは忘れずにチェックしておきましょう。
2.寄稿者編集設定
上記のWP-Membersにて登録した会員が記事投稿できる仕組みを作ります。
functions.phpを開き、下記のコードを一番下のあたりにコピーアンドペーストで追加してください。
if ( current_user_can('contributor') && !current_user_can('upload_files') )
add_action('admin_init', 'allow_contributor_uploads');
function allow_contributor_uploads() {
$contributor = get_role('contributor');
$contributor->add_cap('upload_files');
}
function display_only_self_uploaded_medias( $wp_query ) {
if ( is_admin() && ( $wp_query->is_main_query() || ( defined( 'DOING_QUERY_ATTACHMENT' ) && DOING_QUERY_ATTACHMENT ) ) && $wp_query->get( 'post_type' ) == 'attachment' ) {
$user = wp_get_current_user();
$wp_query->set( 'author', $user->ID );
}
}
function define_doing_query_attachment_const() {
if ( ! defined( 'DOING_QUERY_ATTACHMENT' ) ) {
define( 'DOING_QUERY_ATTACHMENT', true );
}
}
get_currentuserinfo();
if($current_user->user_level < 10){
add_action( 'pre_get_posts', 'display_only_self_uploaded_medias' );
add_action( 'wp_ajax_query-attachments', 'define_doing_query_attachment_const', 0 );
}
function exclude_other_posts( $wp_query ) {
if ( isset( $_REQUEST['post_type'] ) && post_type_exists( $_REQUEST['post_type'] ) ) {
$post_type = get_post_type_object( $_REQUEST['post_type'] );
$cap_type = $post_type->cap->edit_other_posts;
} else {
$cap_type = 'edit_others_posts';
}
if ( is_admin() && $wp_query->is_main_query() && ! $wp_query->get( 'author' ) && ! current_user_can( $cap_type ) ) {
$user = wp_get_current_user();
$wp_query->set( 'author', $user->ID );
}
}
add_action( 'pre_get_posts', 'exclude_other_posts' );
function disable_drag_metabox() {
wp_deregister_script('postbox');
}
add_action( 'admin_init', 'disable_drag_metabox' );
いったいこれはなんのコードかというと、寄稿者の権限でも画像を投稿できたりとか、他人の投稿を表示しないようにするとか、そういう設定をしています。
詳しくはわかったブログ様の記事でとても分かりやすく説明されております。わかったか。
3.通知設定
WP Status Notifierをインストールして、寄稿者が記事を投稿したことを管理者にメールで通知させます。
カンマを入れることで複数の通知先メールアドレスを設定することができます。

以上の作業により、冒頭で述べた記事投稿サイトの仕組みを作ることができます。