Was sind “Autoren” in WordPress, und gibt es eine Autor “Metabox-class” überall verfügbar?

Ich versuche, ein neues Projekt zu skizzieren, in dem ich meinen Benutzern die Möglichkeit geben möchte, ihre “Profil” -Seiten in meinem Webseitenthema anzupassen. Konzepte wie das Hinzufügen eigener Hintergrundbilder, Vorlagen usw.

Es erschien mir logisch, diese Informationen im Autoren-Meta zu speichern, da dies die einzige Tabelle zu sein scheint, in der eindeutige Informationen für jeden Benutzer gespeichert werden. Sobald ich die Eingabefelder eingerichtet habe, kann ich einfach die Anrufe in meinem Thema tätigen.

Benutzer scheinen keine Post-Typen oder Taxonomien zu sein, aber ich kann nicht herausfinden, was sie wirklich sind. Kann jemand einen Moment nehmen, um zu beschreiben, was “Benutzer” wirklich in den Augen von WordPress sind?

Was ich letztendlich gehofft habe, ist eine class zu finden, in der ich Metaboxen leicht zu den Profilseiten des Editierautors hinzufügen kann.

Ich weiß, wie man Profilfelder über Formulare erweitert, aber ich suche nach etwas viel flexiblerem.

* Ich benutze die Farinspace-Metabox-class für meine Post-Typen und liebe absolut, wie es funktioniert, in der Hoffnung, dass ich etwas Ähnliches für die Autorenseiten verwenden kann.

Ist das möglich oder gibt es einen besseren Weg?

Solutions Collecting From Web of "Was sind “Autoren” in WordPress, und gibt es eine Autor “Metabox-class” überall verfügbar?"

Autoren sind eher einfache Inhaltsobjekte in WordPress. Sie haben Rollen und Fähigkeiten , einige grundlegende Metadaten und ihre eigenen Bearbeitungsbildschirme. Das ist es ziemlich viel. Wenn Sie Autoren eine benutzerdefinierte Taxonomie hinzufügen möchten, müssen Sie jeden Benutzer mit einem (versteckten) benutzerdefinierten Beitragstyp spiegeln, da das Autorenobjekt keine Taxonomien unterstützt …

Wie auch immer … für Meta-Boxen habe ich eine einfache class geschrieben. Ich hoffe, es hilft zu verstehen, wie die Dinge funktionieren und wo man sich einklinken kann.

class T5_User_Profile_Addon

 < ?php /** * Adds a form field to the edit profile page. * * @author Thomas Scholz http://toscho.de * @version 1.2 * @license GPL * */ class T5_User_Profile_Addon { public $settings = array ( /* The name attribute. */ 'name' => '' , 'label' => '' , 'description' => '' /* You may use the following placeholder: * %name% - name attribute * %label% - label text * %description% - additional text * To use more placeholders, extend markup_filter(). */ , 'markup' => '' /* If both are not FALSE, they will replace the 'markup', and a * table will be created. Uses the same placeholders as 'markup'. */ , 'th' => FALSE , 'td' => FALSE /* Capabilities to show and edit the field. * Useful, if want to add a field that only administrators or editors * may edit or view. */ , 'cap_show' => 'read' , 'cap_save' => 'edit_user' ); /** * Constructor * * @param array $args See settings. 'name' and 'markup' required. */ public function __construct( $args ) { $this->settings = array_merge( $this->settings, $args ); // The id attribute should be different to name, otherwise it doesn't // work in Opera. empty ( $this->settings['id'] ) and $this->settings['id'] = $this->settings['name'] . '_id'; FALSE !== $this->settings['th'] and FALSE !== $this->settings['td'] and $this->settings['markup'] = '
' . $this->settings['th'] . '' . $this->settings['td'] . '
'; add_action( 'show_user_profile', array ( $this, 'show' ) ); add_action( 'edit_user_profile', array ( $this, 'show' ) ); add_action( 'personal_options_update', array ( $this, 'save' ) ); add_action( 'edit_user_profile_update', array ( $this, 'save' ) ); } /** * Prints the form. * * @param object $user * @return void */ public function show( $user ) { if ( ! current_user_can( $this->settings['cap_show'], $user->ID ) ) { return; } $label = ""; $markup = strtr( $this->settings['markup'], array ( '%name%' => $this->settings['name'] , '%id%' => $this->settings['id'] , '%label%' => $label , '%description%' => $this->settings['description'] ) ); $old_val = trim( get_the_author_meta( $this->settings['name'], $user->ID ) ); $markup = $this->markup_filter( $markup, $old_val ); print $markup; } /** * Saves the data. * * @param int $user_id * @return void */ public function save( $user_id ) { if ( ! current_user_can( $this->settings['cap_save'], $user_id ) ) { return; } $input = empty ( $_POST[ $this->settings['name'] ] ) ? '' : $_POST[ $this->settings['name'] ]; $input = $this->prepare_input( $input ); update_user_meta( $user_id, $this->settings['name'], $input ); } /** * Prepares the user input. For extensions. * * @param string $input * @return string */ public function prepare_input( $input ) { return $input; } /** * Prepares the form markup. * * @param string $markup * @param string $old_val * @return string */ public function markup_filter( $markup, $old_val ) { $old_val = htmlspecialchars( $old_val, ENT_QUOTES, 'utf-8', FALSE ); return str_replace( '%content%', $old_val, $markup ); } }

Verwendung

 < ?php add_action( 'init', 'init_profile_addons' ); function init_profile_addons() { $GLOBALS['extended_author_text'] = new T5_User_Profile_Addon( array ( 'name' => 'extended_author_text' , 'label' => 'Second text field' , 'description' => '

This text will be shown at the top of your author archive. You may use HTML.

' , 'markup' => '
%label%

%description%
' ) ); }

Beispiel: ein Kontrollkästchen

In einigen Fällen möchten Sie möglicherweise die class erweitern, um ein bestimmtes Verhalten zu ändern. Hier habe ich ein Kontrollkästchen erstellt:

 /** * Template for a simple checkbox. */ class T5_User_Profile_Checkbox extends T5_User_Profile_Addon { public function prepare_input( $input ) { // Convert the checkbox value to integer return '' == trim( $input ) ? 0 : 1; } public function markup_filter( $markup, $old_value ) { // Preselect the checkbox if necessary. $checked = 1 == $old_value ? ' checked="checked"' : ''; return str_replace( '%checked%', $checked, $markup ); } } 

Mein primitives Vorlagensystem ist möglicherweise nicht der beste Ansatz. Es gibt keine benutzerfreundliche Fehlerbehandlung. Ich brauchte nur etwas, das funktioniert und leicht zu verstehen ist. 🙂

/wp-admin/user-edit.php : do_action( 'show_user_profile', $profileuser ); . Versuchen Sie, Ihren Anruf an die Metabox dort zu hängen. Wenn es nicht funktioniert, sollten Sie sich ansehen, welche Skripte für Post-Edit-Bildschirme hinzugefügt werden und diese auch dort hinzufügen.