フロントエンドでユーザープロファイルを非表示にしながら、バックエンドでユーザー情報にアクセスできるようにする方法はありますか?
投稿やページを "ドラフト"に設定するのと似ていますが、ユーザーにとっては完全に機能します。これを行う方法はありますか?
ユーザー用のデータベーステーブルはuser_status
を整数として保持します。
$users_single_table = "CREATE TABLE $wpdb->users (
ID bigint(20) unsigned NOT NULL auto_increment,
user_login varchar(60) NOT NULL default '',
user_pass varchar(255) NOT NULL default '',
user_nicename varchar(50) NOT NULL default '',
user_email varchar(100) NOT NULL default '',
user_url varchar(100) NOT NULL default '',
user_registered datetime NOT NULL default '0000-00-00 00:00:00',
user_activation_key varchar(255) NOT NULL default '',
user_status int(11) NOT NULL default '0',
display_name varchar(250) NOT NULL default '',
PRIMARY KEY (ID),
KEY user_login_key (user_login),
KEY user_nicename (user_nicename),
KEY user_email (user_email)
) $charset_collate;\n";
現時点でのWP_Users
クラスには、stateプロパティを変更するもの、そのプロパティを保持するものさえありません。
wp-admin/includes/ms.php
の中には、どのようにして道を辿るのかを示す関数が一つあります。
update_user_status( $user_id, 'spam', '1' );
しかし、マルチサイトのためだけにロードします:
/wp-admin/includes/admin.php:
82 if ( is_multisite() ) {
83 require_once(ABSPATH . 'wp-admin/includes/ms-admin-filters.php');
84: require_once(ABSPATH . 'wp-admin/includes/ms.php');
85 require_once(ABSPATH . 'wp-admin/includes/ms-deprecated.php');
86 }
それはこのように見えます:
function update_user_status( $id, $pref, $value, $deprecated = null ) {
global $wpdb;
if ( null !== $deprecated )
_deprecated_argument( __FUNCTION__, '3.0.2' );
$wpdb->update( $wpdb->users, array( sanitize_key( $pref ) => $value ), array( 'ID' => $id ) );
$user = new WP_User( $id );
clean_user_cache( $user );
if ( $pref == 'spam' ) {
if ( $value == 1 ) {
/**
* Fires after the user is marked as a SPAM user.
*
* @since 3.0.0
*
* @param int $id ID of the user marked as SPAM.
*/
do_action( 'make_spam_user', $id );
} else {
/**
* Fires after the user is marked as a HAM user. Opposite of SPAM.
*
* @since 3.0.0
*
* @param int $id ID of the user marked as HAM.
*/
do_action( 'make_ham_user', $id );
}
}
return $value;
}
似たようなものを使ってアクションフックmake_draft_user
をあなたの関数の中で作成することができます_20161214_update_user_status( $user_id, 'draft', '1' );
あなた自身のmake_draft_user
フックの中であなたは何をすべきかを定義することができました。
そのため、WordPressをそのまま使用してもドラフトユーザーは利用できません。多分それは明確なユースケースのシナリオでいつかになるでしょう。ステータスはintではなく文字列になる可能性があります(これは投稿の場合です)。
データベースでuser_statusを2に設定すると、うまくいくようです。