it-swarm.com.de

Gibt es eine Möglichkeit, ein Benutzerprofil auf Entwurf festzulegen?

Gibt es eine Möglichkeit, Benutzerprofile im Front-End auszublenden, ohne dass deren Informationen im Back-End zugänglich sind?

Ähnlich wie das Setzen von Posts oder Seiten auf "Entwurf", jedoch für Benutzer, würde dies perfekt funktionieren. Gibt es eine Möglichkeit, dies zu tun?

5
NNCCBB

Die Datenbanktabelle für Benutzer enthält den user_status als Ganzzahl:

    $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";

Die WP_Users-Klasse hat im Moment nichts, was die state-Eigenschaft ändern oder diese Eigenschaft halten würde.

 enter image description here 

Es gibt eine Funktion in wp-admin/includes/ms.php, die Ihnen möglicherweise den Weg zeigt, wie Sie vorgehen müssen.

update_user_status( $user_id, 'spam', '1' );

lädt aber nur für Multisite:

/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  }

Es sieht aus wie das:

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;
}

Sie könnten etwas Ähnliches verwenden und den Aktions-Hook make_draft_user erstellen, wahrscheinlich in Ihrer Funktion _20161214_update_user_status( $user_id, 'draft', '1' );

In Ihrem eigenen make_draft_user-Hook können Sie definieren, was zu tun ist.

WordPress Out-of-the-Box bietet also keine Draft-Benutzer. Vielleicht wird es eines Tages mit dem klaren Use-Case-Szenario. Möglicherweise ist der Status ein String und nicht der int (Dies ist bei Posts der Fall).

2
prosti

Das Setzen von user_status auf 2 in der Datenbank scheint den Trick zu tun

0
NNCCBB