Skip to content

Instantly share code, notes, and snippets.

@onocom
Last active November 26, 2015 02:25
Show Gist options
  • Save onocom/f787ffeaf5a80098d88f to your computer and use it in GitHub Desktop.
Save onocom/f787ffeaf5a80098d88f to your computer and use it in GitHub Desktop.
【WordPress】ユーザ登録・削除時に記事を追加・削除する処理
<?php
/**
* ユーザアーカイブページにコメント機能を付けたくて実装してみた。
*  特定権限のユーザならば、コメント専用投稿タイプの記事を1記事だけ追加する。
*  ユーザ削除時にはその記事を削除するという動きをしてます。
*  ただ、結局この機能は実装しなくなったので詳細の詰めがもっと必要だと思います\(^o^)/
*/
// 権限チェック関数
function oc_is_member($authorid) {
return user_can($authorid, "gold_member") || user_can($authorid, "free_member");
}
// 追加時の処理
add_action( 'user_register', 'oc_user_register_setting', 10, 1 );
function oc_user_register_setting( $user_id ) {
// メンバー権限だったらコメント記事を追加
if ( oc_is_member($user_id) ) {
oc_insert_comment_post($user_id);
}
}
// ユーザ削除時の処理
add_action( 'delete_user', 'oc_user_delete_setting' );
function oc_user_delete_setting( $user_id ) {
// 削除時にはコメント記事を削除
if ( oc_is_member($user_id) ) {
$del_id = get_user_meta($user_id, 'comment_post_id', true);
if($del_id) {
wp_delete_post( $del_id, true );
}
}
}
// 記事追加
function oc_insert_comment_post( $user_id ) {
$existcheck = get_user_meta($user_id, 'comment_post_id', true);
if(empty($existcheck)) {
$user_info = get_userdata($user_id);
// 投稿オブジェクトを作成
$my_post = array(
'post_title' => 'プロフィール:' . $user_info->user_login,
'post_content' => '',
'post_status' => 'publish',
'post_author' => $user_id,
'post_type' => 'member-comment', // 投稿タイプを指定するべし
'comment_status' => 'open'
);
// 投稿をデータベースへ追加
$postid = wp_insert_post( $my_post );
update_user_meta($user_id, 'comment_post_id', $postid);
}
}
// 投稿タイプ追加
add_action( 'init', 'oc_registor_customtype' );
function oc_registor_customtype() {
// コメント専用投稿タイプ
register_post_type( 'member-comment',
array(
'labels' => array(
'name' => __( 'コメント専用投稿タイプ' ),
'singular_name' => __( 'コメント専用投稿タイプ' )
),
'public' => false,
'has_archive' => false,
'capability_type' => 'member-comment',
'support' => array('author','title','comments'),
'rewrite' => false
)
);
}
// 権限を追加する
add_action('init','oc_custom_role');
function oc_custom_role() {
add_role( 'gold_member', '有料メンバー', array( 'read' => true ) );
add_role( 'free_member', '無料メンバー', array( 'read' => true ) );
// 権限グループをすべて取得
$roles = new WP_Roles();
foreach ($roles->roles as $key => $value ) {
// 権限取得
$role = get_role($key);
// メンバーだったら権限追加
if ( $key == "gold_member" || $key == "free_member" ){
// コメント専用投稿タイプの権限
$role->add_cap( 'edit_member-comment' );
}
// 管理者権限
if ( $key == "administrator" ){
// 追加した投稿タイプすべての権限を有する
$role->add_cap( 'edit_member-comment' );
$role->add_cap( 'read_member-comment' );
$role->add_cap( 'delete_member-comment' );
$role->add_cap( 'edit_member-comments' );
$role->add_cap( 'edit_others_member-comments' );
$role->add_cap( 'publish_member-comments' );
$role->add_cap( 'read_private_member-comments' );
$role->add_cap( 'delete_member-comments' );
$role->add_cap( 'delete_private_member-comments' );
$role->add_cap( 'delete_published_member-comments' );
$role->add_cap( 'delete_others_member-comments' );
$role->add_cap( 'edit_private_member-comments' );
$role->add_cap( 'edit_published_member-comments' );
}
}
}
// コメント先列を削除する。しておかないと非公開のカスタム投稿タイプ編集画面に飛んでってしまう。
// http://stv.whtly.com/2011/07/27/adding-custom-columns-to-the-wordpress-comments-admin-page/
add_filter( 'manage_edit-comments_columns', 'oc_comments_columns' );
function oc_comments_columns( $columns ) {
unset($columns['response']); // コメント先列削除
return $columns;
}
// コメントの日付を押すと記事編集ページに飛んでいってしまうのでCSSで非表示にした
add_action('admin_print_styles', 'oc_my_admin_style');
function oc_my_admin_style() {
if( !current_user_can("manage_options")) {
echo '<style>';
echo '#the-comment-list .submitted-on {display: none;}';
echo '</style>';
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment