Wenn Leute, die Sie öffentlich auf einer Site zeigen möchten, Benutzer sind , dh ein Konto haben und Beiträge schreiben, ist es meiner Meinung nach viel besser, die WordPress-Benutzerfunktionalität zu verwenden: Alle Informationen, die Sie in ein CPT eingeben würden, können auch in Benutzermetadaten eingegeben werden Das Erstellen von Benutzern ist obligatorisch (sie müssen sich anmelden), während das Erstellen eines CPT vermieden werden kann und für mich überflüssig ist.
Ich weiß jedoch, dass die Verwendung eines CPT aus folgenden Gründen einfacher sein kann:
- Die Standardprofilseite des WP-Administrators enthält nur wenige Informationen.
- In WP gibt es überhaupt keine öffentliche Profilseite: Es
author.php
handelt sich nicht um eine Profilseite.
- Neben der Profilseite, möchten Sie wahrscheinlich zu Schleife durch Personal und natürlich die Sie verwenden können ,
WP_User_Query
dies zu tun, sondern isolieren Personal von den Benutzern , die müssen versteckt ein wenig schwer sein kann: kein Benutzer Taxonomie ist und mit Benutzerrollen können Generieren Sie Probleme, wenn Sie die öffentliche Rolle einem Benutzer zuweisen möchten, der nicht öffentlich sichtbar sein darf.
Zum Glück sind diese Probleme keine wirklichen Probleme und können leicht gelöst werden. Der Workflow, den ich vorschlage, ist:
- Erstellen Sie eine neue Benutzerrolle. Sie können Funktionen von einer Standardrolle klonen, aber das Erstellen einer Rolle und das Isolieren von Mitarbeitern von anderen Benutzern ist sehr einfach.
- Fügen Sie benutzerdefinierte Felder für Benutzerprofile hinzu und geben Sie alle gewünschten Informationen ein.
- Erstellen Sie eine Seitenvorlage, die die Benutzerschleife und das Benutzerprofil behandelt. Wie? Schauen Sie sich Punkt 4 an.
- Erstellen Sie einen Umschreibe-Endpunkt. Auf diese Weise
example.com/staff
ruft eine URL wie eine Seite auf (die, die Sie der am 3. erstellten Vorlage zuweisen), und eine URL wie example.com/staff/user/nickname
ruft dieselbe Seite auf, übergibt jedoch die Abfragevariable user
mit einem Wert nickname
, den Sie auf der Seite verwenden können, um den Benutzer anzuzeigen Profil.
1., 2. und 4. können einfach in einem Plugin erledigt werden. Ich werde dir die Bones dieses Plugins geben, die verbessert werden sollten:
<?php
/**
* Plugin Name: Staff Plugin
* Description: Test
* Author: G.M.
*/
/**
* Add a new role cloning capabilities from editor and flush rewrite rules
*/
function install_staff_plugin() {
$editor = get_role( 'editor' );
add_role( 'staff', 'Staff', $editor->capabilities );
staff_plugin_endpoint();
flush_rewrite_rules();
}
/**
* Remove the role and flush rewrite rules
*/
function unistall_staff_plugin() {
remove_role( 'staff' );
flush_rewrite_rules();
}
/**
* Add the endpoint
*/
function staff_plugin_endpoint() {
add_rewrite_endpoint( 'user', EP_PAGES );
}
/**
* Add custom field to profile page
*/
function staff_plugin_profile_fields( $user ) {
$fields = array(
'facebook' => __('Facebook'),
'twitter' => __('Twitter'),
'photo_id' => __('Photo ID (use attachment id)')
);
echo '<h3>' . __('Staff Information') . '</h3>';
echo '<table class="form-table">';
foreach ( $fields as $field => $label ) {
$now = get_user_meta( $user->ID, $field, true ) ? : "";
printf( '<tr><th><label for="%s">%s</label></th>',
esc_attr($field), esc_html($label) );
printf( '<td><input type="text" name="%s" id="%s" value="%s" class="regular-text" /><br /></td></tr>',
esc_attr($field), esc_attr($field), esc_attr($now) );
}
echo '</table>';
}
/**
* Save the custom fields
*/
function staff_plugin_profile_fields_save( $user_id ) {
if ( ! current_user_can( 'edit_user', $user_id ) ) return;
$fields = array( 'facebook', 'twitter', 'photo_id' );
foreach ( $fields as $field ) {
if ( isset( $_POST[$field] ) )
update_user_meta( $user_id, $field, $_POST[$field] );
}
}
add_action( 'init', 'staff_plugin_endpoint' );
add_action( 'show_user_profile', 'staff_plugin_profile_fields' );
add_action( 'edit_user_profile', 'staff_plugin_profile_fields' );
add_action( 'personal_options_update', 'staff_plugin_profile_fields_save' );
add_action( 'edit_user_profile_update', 'staff_plugin_profile_fields_save' );
register_activation_hook( __FILE__, 'install_staff_plugin' );
register_deactivation_hook( __FILE__, 'unistall_staff_plugin' );
Das Plugin macht genau das, was ich gesagt habe. Als Beispiel für das Hinzufügen benutzerdefinierter Felder für Benutzerprofile habe ich nur drei Felder hinzugefügt. Eine davon ist für ein Benutzerbild vorgesehen und akzeptiert die ID eines Anhangs. In der realen Welt ist es natürlich besser, den Medien-Uploader anzurufen und den Benutzer ein Bild hochladen zu lassen, aber dies ist nicht im Umfang dieser Antwort ...
Nachdem das Plugin gespeichert und aktiviert wurde, müssen wir die Seitenvorlage erstellen, eine Seite erstellen und diese Vorlage zuweisen. Auch hier werde ich einen Proof of Concept für die Vorlage posten:
<?php
/**
* Template Name: Staff Page
*
*/
get_header(); ?>
<div id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<?php
/* The page content */
while ( have_posts() ) : the_post();
$page_link = get_permalink();
the_content();
endwhile;
$required_user = get_query_var( 'user' );
$wanted_meta = array(
'first_name', // This is a standard meta
'facebook', // This is an example of custom meta
'twitter' // This is another example of custom meta
);
if ( empty( $required_user ) ) {
/* The Users Loop */
// Customize the args as you need
$args = array (
'role' => 'Staff',
'orderby' => 'post_count',
'order' => 'DESC',
'fields' => 'all'
);
$user_query = new WP_User_Query( $args );
if ( ! empty( $user_query->results ) ) {
foreach ( $user_query->results as $user ) {
$profile_url = trailingslashit($page_link) . 'user/' . $user->user_nicename;
// This gets ALL the meta fields as a 2 dimensional array (array of arrays)
$meta_fields = get_user_meta( $user->ID );
?>
<div id="user-<?php echo $user->ID ?>">
<?php
// An example of custom meta where to save the id of an attachment
if ( isset($meta_fields['photo_id'][0]) && ! empty($meta_fields['photo_id'][0]) ) {
echo '<a href="' . esc_url($profile_url) . '/">';
echo wp_get_attachment_image( $meta_fields['photo_id'][0], 'medium' );
echo '</a>';
}
?>
<h2><?php echo '<p><a href="' .esc_url( $profile_url ) . '/">' .
$user->display_name . '</a></p>';?></h2>
<p><?php echo $meta_fields['description'][0]; ?></p>
<ul>
<?php
foreach ( $wanted_meta as $key ) {
if ( isset($meta_fields[$key][0]) && ! empty($meta_fields[$key][0]) ) {
?>
<li><?php echo $meta_fields[$key][0]; ?></li>
<?php }
} ?>
</ul>
</div>
<?php
}
}
} else {
/* One User Requested */
$user = get_user_by( 'slug', $required_user );
if ( $user ) {
?>
<div id="user-<?php echo $user->ID ?>">
<?php
$meta_fields = get_user_meta( $user->ID );
if ( isset( $meta_fields['photo_id'][0] ) && ! empty( $meta_fields['photo_id'][0] ) ) {
echo wp_get_attachment_image( $meta_fields['photo_id'][0], 'full' );
}
?>
<h1><?php echo '<p>' . $user->display_name . '</p>';?></h1>
<p><?php echo $meta_fields['description'][0]; ?></p>
<p>
<a href="<?php echo get_author_posts_url($user->ID); ?>"><?php
printf(__('See all posts by %s'), $user->display_name); ?></a> |
<a href="<?php echo $page_link; ?>"><?php _e('Back to Staff'); ?></a>
</p>
<ul>
<?php
foreach ( $wanted_meta as $key ) {
if ( isset( $meta_fields[$key][0] ) && ! empty( $meta_fields[$key][0] ) ) {
?>
<li><?php echo $meta_fields[$key][0]; ?></li>
<?php
}
} ?>
</ul>
</div>
<?php
}
}
?>
</div><!-- #content -->
</div><!-- #primary -->
<?php get_footer(); ?>
Erstellen Sie nun eine Seite und weisen Sie diese Vorlage zu. Weisen Sie dann Ihren Mitarbeitern die Benutzerrolle 'Mitarbeiter' zu und füllen Sie die Profile aus.
Als letzten Schliff können Sie in Ihrem author.php
Text, wahrscheinlich in der Kopfzeile, Folgendes hinzufügen:
<div class="author-info">
<?php
$curauth = ( get_query_var( 'author_name' ) ) ?
get_user_by( 'slug', get_query_var( 'author_name' ) ) :
get_userdata( get_query_var( 'author' ) );
$photo = get_user_meta( $curauth->ID, 'photo_id', true );
if ( $photo ) echo wp_get_attachment_image( $photo, 'medium' );
?>
<h2><?php echo $curauth->display_name; ?></h2>
<h3><em><?php echo $curauth->user_description; ?></em></h3>
</div>
Das ist alles. Teste es, verbessere es und habe Spaß damit.