WPで会員サイトのように投稿または更新してもらう方法
プラグインは使用しない。下記のコードをfunctions.php下行に追加するだけ。
※注意点:テーマの更新後には再度コードの追加が必要
管理者、編集者、寄稿者で見られる画面等制限かけられる。
流れ的には寄稿者が投稿(カテゴリ選択、タグの挿入はできない)するとレビュー待ちになるので、編集者(または管理者)がレビューしカテゴリ選択、タグ挿入して公開という感じ。
/* * メディアの抽出条件にログインユーザーの絞り込み条件を追加する*/ 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 my_admin_head(){ echo ''; } add_action('admin_head', 'my_admin_head'); // メニューを非表示にする function remove_menus () { if (!current_user_can('level_10')) { //level10以下のユーザーの場合メニューをunsetする remove_menu_page('wpcf7'); //Contact Form 7 global $menu; //unset($menu[2]); // ダッシュボード //unset($menu[4]); // メニューの線1 //unset($menu[5]); // 投稿 //unset($menu[10]); // メディア unset($menu[15]); // リンク unset($menu[20]); // ページ unset($menu[25]); // コメント //unset($menu[59]); // メニューの線2 unset($menu[60]); // テーマ unset($menu[65]); // プラグイン unset($menu[70]); // プロフィール unset($menu[75]); // ツール unset($menu[80]); // 設定 unset($menu[90]); // メニューの線3 } } add_action('admin_menu', 'remove_menus'); //入力画面のカテゴリとタグの設定を非表示に /* 管理者=10 編集者=7 投稿者=2 寄稿者=1 購読者=0 */ if (!current_user_can('level_7')) { function remove_extra_meta_boxes() { remove_meta_box( 'categorydiv','post','side'); /* 投稿のカテゴリーフィールド */ //remove_meta_box( 'postcustom' , 'post' , 'normal' ); /* 投稿のカスタムフィールド */ //remove_meta_box( 'postcustom' , 'page' , 'normal' ); /* 固定ページのカスタムフィールド */ //remove_meta_box( 'postexcerpt' , 'post' , 'normal' ); /* 投稿の抜粋 */ //remove_meta_box( 'postexcerpt' , 'page' , 'normal' ); /* 固定ページの抜粋 */ //remove_meta_box( 'commentsdiv' , 'post' , 'normal' ); /* 投稿のコメント */ //remove_meta_box( 'commentsdiv' , 'page' , 'normal' ); /* 固定ページのコメント */ remove_meta_box( 'tagsdiv-post_tag' , 'post' , 'side' ); /* 投稿のタグ */ //remove_meta_box( 'tagsdiv-post_tag' , 'page' , 'side' ); /* 固定ページのタグ */ //remove_meta_box( 'trackbacksdiv' , 'post' , 'normal' ); /* 投稿のトラックバック */ //remove_meta_box( 'trackbacksdiv' , 'page' , 'normal' ); /* 固定ページのトラックバック */ //remove_meta_box( 'commentstatusdiv' , 'post' , 'normal' ); /* 投稿のディスカッション */ //remove_meta_box( 'commentstatusdiv' , 'page' , 'normal' ); /* ページのディスカッション */ //remove_meta_box( 'slugdiv','post','normal'); /* 投稿のスラッグ */ //remove_meta_box( 'slugdiv','page','normal'); /* 固定ページのスラッグ */ //remove_meta_box( 'authordiv','post','normal' ); /* 投稿の作成者 */ //remove_meta_box( 'authordiv','page','normal' ); /* 固定ページの作成者 */ //remove_meta_box( 'revisionsdiv','post','normal' ); /* 投稿のリビジョン */ //remove_meta_box( 'revisionsdiv','page','normal' ); /* 固定ページのリビジョン */ //remove_meta_box( 'pageparentdiv','page','side'); /* 固定ページのページ属性 */ } add_action( 'admin_menu' , 'remove_extra_meta_boxes' ); } // バージョン更新を非表示にする add_filter('pre_site_transient_update_core', '__return_zero'); // APIによるバージョンチェックの通信をさせない remove_action('wp_version_check', 'wp_version_check'); remove_action('admin_init', '_maybe_update_core'); // 管理バーにログアウトを追加 function add_new_item_in_admin_bar() { global $wp_admin_bar; $wp_admin_bar->add_menu(array( 'id' => 'new_item_in_admin_bar', 'title' => __('ログアウト'), 'href' => wp_logout_url() )); } add_action('wp_before_admin_bar_render', 'add_new_item_in_admin_bar'); function my_custom_login_logo() { echo ''; } add_action('login_head', 'my_custom_login_logo'); //投稿リストから「すべて」などを消す function custom_columns($columns) { if (!current_user_can('level_10')) { echo ''; } return $columns; } add_filter( 'manage_posts_columns', 'custom_columns' ); // 管理バーの項目を非表示 function remove_admin_bar_menu( $wp_admin_bar ) { $wp_admin_bar->remove_menu( 'wp-logo' ); // WordPressシンボルマーク //$wp_admin_bar->remove_menu('my-account'); // マイアカウント } add_action( 'admin_bar_menu', 'remove_admin_bar_menu', 70 ); //入力画面 現在の状況 のWordPress表示を消す function my_admin_print_styles(){ if (!current_user_can('level_10')) { echo ''; } } add_action('admin_print_styles', 'my_admin_print_styles', 21); // フッターWordPressリンクを非表示に function custom_admin_footer() { echo 'お問い合わせ'; } add_filter('admin_footer_text', 'custom_admin_footer'); function disable_drag_metabox() { wp_deregister_script('postbox'); } add_action( 'admin_init', 'disable_drag_metabox' );
編集者がカテゴリー、タグを追加できるように変更。73行目をlevel_10からlevel_7に変更。(管理者=10 編集者=7 投稿者=2 寄稿者=1 購読者=0)
参考サイト:WordPressで会員に更新してもらうサイトを作る方法
参考サイト:覚えておきたいWordPressのユーザー権限の種類と登録・管理方法
functions.phpを更新しようとすると403エラーが出た場合の対処
参考サイト: ロリポップ WordPressでphpファイルの更新をすると403エラーとなる時の対処