Bij het ontwikkelen van een intranet oplossing met WordPress hebben we WordPress gebruikers gekoppeld aan een WordPress profiel berichten. Voor elke WordPress gebruiker die wordt aangemaakt wordt er ook automatisch een WordPress profiel bericht aangemaakt. Op deze manier hebben we met behulp van WordPress bericht archieven eenvoudig een overzicht van alle gebruikers (profielen) kunnen aanmaken. Daarnaast hebben we met krachtige WP_Query parameters een aantal handige zoek- en filter functies kunnen realiseren.
Eventueel zou een dergelijke opzet ook met een WP_User_Query object gerealiseerd kunnen worden, maar uiteindelijk liepen we hierbij tegen meer maatwerk code aan. Daarnaast konden we door te werken met WordPress profiel berichten eenvoudig gebruik van taxonomieën en uitgelichte afbeeldingen. We realiseren ons dat taxonomieën ook inzetbaar zijn voor WordPress gebruikers, maar toch liepen we daarmee ook tegen lastige problemen aan. Nadat we uiteindelijk alle functionaliteiten netjes aan elkaar geknoopt hadden liep onze opdracht echter tegen een klein probleem aan.
Het importeren van honderden intranet gebruikers leverden problemen op. De uitgelichte afbeeldingen kon niet geautomatiseerd geplaatst worden en termen werden niet gekoppeld aan de WordPress profiel berichten van een gebruiker. Wij kregen daarom de opdracht om eenmalig het één en andere te corrigeren. Onze opdrachtgever was er in geslaagd om alle data te importeren, maar het stond alleen nog niet op de juiste plek. De profiel afbeelding link stond zo opgeslagen in het Hyves veld bij een gebruiker en de afdeling term ID in het Flickr veld.
We hebben met eenvoudige WordPress maatwerk pagina sjabloon een eenvoudig script ontwikkeld die het één en andere geautomatiseerd gecorrigeerd heeft. Hieronder is dit scrip te zien, wellicht dat andere WordPress ontwikkelaars hier in de toekomst nog wat aan hebben.
<?php
/**
* Template Name: Users update
*/
require_once ABSPATH . 'wp-admin/includes/file.php';
require_once ABSPATH . 'wp-admin/includes/image.php';
get_header(); ?>
<div id="content" role="main">
<div class="container">
<?php if(have_posts()) while(have_posts()): the_post(); ?>
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<header>
<h2 class="entry-title"><?php the_title(); ?></h2>
</header>
<div class="entry-content">
<?php the_content(); ?>
<?php wp_link_pages(array('before' => '<div class="page-link">' . __('Pages:', 'eisma'), 'after' => '</div>')); ?>
</div>
</div>
<?php endwhile; ?>
<?php
$wp_user_search = new WP_User_Query(array(
/*'role' => 'subscriber', */
'fields' => 'all_with_meta' ,
// 'number' => 1 ,
));
$users = $wp_user_search->get_results();
$i = 1;
?>
<table>
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Name</th>
<th scope="col">Profile</th>
<th scope="col">Location</th>
<th scope="col">Business</th>
<th scope="col">Image</th>
</tr>
</thead>
<tbody>
<?php foreach($users as $user): ?>
<tr>
<td>
<?php echo $i++; ?>
</td>
<td>
<?php echo $user->display_name; ?>
</td>
<td>
<?php
$postId = get_user_meta($user->ID, 'profile_post_id', true);
?>
<a href="<?php echo get_permalink($postId); ?>">
Profile
</a>
</td>
<td>
<?php
// locatie in flickr-veld
$locationTermId = get_user_meta($user->ID, 'flickr', true);
echo $locationTermId;
if(!empty($locationTermId)) {
$term = get_term($locationTermId, 'location');
if(!is_wp_error($term) && !empty($term)) {
echo ' - ';
echo $term->name;
wp_set_post_terms($postId, array($term->term_id), 'location');
delete_user_meta($user->ID, 'flickr');
}
}
?>
</td>
<td>
<?php
// bedrijfsonderdeel in youtube-veld
$companyTermId = get_user_meta($user->ID, 'youtube', true);
echo $companyTermId;
if(!empty($companyTermId)) {
$term = get_term($companyTermId, 'company');
if(!is_wp_error($term) && !empty($term)) {
echo ' - ';
echo $term->name;
wp_set_post_terms($postId, array($term->term_id), 'company');
delete_user_meta($user->ID, 'youtube');
}
}
?>
</td>
<td>
<?php
$imageUrl = get_user_meta($user->ID, 'hyves', true);
if(!empty($imageUrl)): ?>
<img src="<?php echo $imageUrl; ?>" width="256" alt="" />
<?php
$result = download_url($imageUrl);
if(!is_wp_error($result)) {
$date = new DateTime();
$name = basename($imageUrl);
$bits = file_get_contents($result);
$result = wp_upload_bits($name, null, $bits, $date->format('Y/m'));
if($result['error'] === false) { // no error
$fileType = wp_check_filetype($result['file']);
$attachment = array(
'post_title' => get_the_title($postId) ,
'post_mime_type' => $fileType['type'] ,
'guid' => $result['url'] ,
'post_parent' => $postId ,
'post_date' => $date->format('Y-m-d H:i:s') ,
'post_date_gmt' => get_gmt_from_date($date->format('Y-m-d H:i:s'))
);
$attachmentId = wp_insert_attachment($attachment, $result['file'], $postId);
update_post_meta($postId, '_thumbnail_id', $attachmentId);
$metaData = wp_generate_attachment_metadata($attachmentId, $result['file']);
$updated = wp_update_attachment_metadata($attachmentId, $metaData);
delete_user_meta($user->ID, 'hyves');
}
}
endif; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Mocht je zelf ook geïnteresseerd zijn in een WordPress intranet dan kun je altijd bij Pronamic informeren naar de mogelijkheden.