Интерфейс списка авторов и поиска пользователей WordPress

Эта статья проведет вас через процесс создания интерфейсной страницы WordPress, на которой перечислены ваши авторы. Мы обсудим, зачем вам это делать, введем класс WP_User_Query, а затем мы соберем все это вместе.

вовлеченность пользователей и WordPress

По своей сути, WordPress является надежной платформой для публикаций. При помощи красивого и удобного интерфейса, а также поддержки пользовательских типов постов и форматов, авторы обретают гибкость в том, что они делают лучше всего: в написании контента.

Тем не менее, WordPress не хватает социального взаимодействия между авторами и читателями контента. BuddyPress пытается решить эту проблему, но я уверен, что он идет в неправильном направлении, пытаясь быть полноценной социальной сетью.

Значимая в издательском мире фраза “вовлечение пользователей”. Смысл ее в том, чтоб заставить читателей тратить больше времени на сайте, активно искать контент и даже создавать свой собственный. В то время как кто-то мог бы написать несколько книг на заданную тему, WordPress издатели могут сделать следующие несколько вещей:

  • Создать ежедневный или еженедельный информационный билютень, с топ-историями из выбранной категории;
  • Организовать редакционно-управляемый открытый форум, в котором редакторы предлагают темы, рассказы и вопросы для обсуждения читателями;
  • Продолжить обсуждение статей на социальных платформах;
  • Поощряют пользователей присылать свои статьи и фотографии для участия в конкурсах;
  • Выводить авторов на передний план.

Список авторов, и чем он полезен

user-listing

Если вы издатель, то ваши авторы это ваш самый большой актив. Они являются создателями контента. Их писанина потребляется миллионами людей во всем мире.

Демонстрация показывает их такими, какие они есть на самом деле: авторитетами. Ваши авторы будут благодарны вам за подобное выражение признательности, и читатели смогут увидеть человеческое лицо за технологией.

Пишем Идеальный Список авторов

Вот то, чего мы хотим достичь с помощью нашей страницы:

  • Построить его в качестве WordPress плагина, так мы сможем облегчить повторное использование;
  • Показать имя, биографию, количество сообщений и последние опубликованные записи всех авторов;
  • Разбить список на страницы, если у нас много авторов;
  • Сделать список доступным для поиска.

Введение в WP_User_Query И get_users

Класс WP_User_Query позволяет нам сделать запрос базе пользователей.

Кроме возвращения массива пользователей, WP_User_Query. возвращает общую информацию о запросе и, самое главное, общее число пользователей (для нумерации страниц)

Вы можете использовать WP_User_Query передав ряд аргументов и составив список вывода.

$my_authors = new WP_User_Query(
	array(
		'blog_id' => $GLOBALS['blog_id'],
		'role' => '',
		'meta_key' => '',
		'meta_value' => '',
		'meta_compare' => '',
		'include' => array(),
		'exclude' => array(),
		'search' => '',
		'orderby' => 'login',
		'order' => 'ASC',
		'offset' => '',
		'number' => '',
		'count_total' => true,
		'fields' => 'all',
		'who' => ''
));

Мы остановимся лишь на нескольких аргументах, вместо прохода по всем из них:

  • role Это роль пользователя. В нашем примере, мы будем запрашивать author.
  • offset Первые n пользователей должны быть пропущены в возвращаемом массиве.
  • number Ограничить общее количество возвращенных пользователей.

У нас также есть класс get_users, который (как и WP_User_Query) возвращает количество пользователей на основе заданных параметров.

Важное различие между ними состоит в том, что get_users возвращает только массив пользователей и их мета-данных, а WP_User_Query возвращает дополнительную информацию, такую ​​как общее количество пользователей (которая полезна, когда приходит время разделения на страницы)

Простое создание списка пользователей  помощью get_users ()

Перед тем как перейти с полному списку пользователей, включающему нумерацию страниц и поиск, давайте посмотрим на get_users в действии.

Если все, что вам нужно, это простой список авторов, то вы можете просто использовать wp_list_authors , вот так:

wp_list_authors('show_fullname=1&optioncount=1&orderby=post_count&order=DESC&number=3');

Создание плагина и шорткода с немного большей функциональностью

Простым и прямым путем к построению списка наших пользователей было бы создать шорткод, который мы могли бы включать на любой понравившейся нам странице.  Было бы идеально, запрятать подобную функциональность в плагин, тогда мы не должны были бы беспокоиться о ее переносе, всякий раз когда мы меняем тему.

Давайте сохраним простоту. Весь наш плагин будет состоять только из одного файла simple-user-listing.php

<?php
/*
Plugin Name: Simple User Listing
Plugin URI: http://cozmoslabs.com
Description: Create a simple shortcode to list our WordPress users.
Author: Cristian Antohe
Version: 0.1
Author URI: http://cozmoslabs.com
*/

function sul_user_listing($atts, $content = null) {
global $post;

extract(shortcode_atts(array(
"role" => '',
"number" => '10'
), $atts));

$role = sanitize_text_field($role);
$number = sanitize_text_field($number);

// Мы выводим много HTML кода, и самый простой способ
// сделать это, использовать буферизацию вывода PHP.
ob_start();

// Получаем условие поиска
$search = ( isset($_GET["as"]) ) ? sanitize_text_field($_GET["as"]) : false ;

// Получаем переменную запроса для разбиения на страницы.
// Она уже существует в WordPress
$page = (get_query_var('paged')) ? get_query_var('paged') : 1;

// Высчитываем отклонение (т.е. как много пользователей надо пропустить)
$offset = ($page - 1) * $number;

if ($search){
// Генерируем запрос основанный на поле поиска
$my_users = new WP_User_Query(
array(
'role' => $role,
'search' => '*' . $search . '*'
));
} else {
// Генерируем запрос
$my_users = new WP_User_Query(
array(
'role' => 'author',
'offset' => $offset ,
'number' => $number
));
}

// Получаем общее число авторов. На основании этого числа, отклонения и числа
 // авторов на странице мы сгенерируем нашу нумерацию страниц.
$total_authors = $my_users->total_users;

// Высчитывает общее количество страниц для их нумерации
$total_pages = intval($total_authors / $number) + 1;

// Объект authors.
$authors = $my_users->get_results();
?>

<div class="author-search">
<h2>Search authors by name</h2>
<form method="get" id="sul-searchform" action="<?php the_permalink() ?>">
<label for="as" class="assistive-text">Search</label>
<input type="text" class="field" name="as" id="sul-s" placeholder="Search Authors" />
<input type="submit" class="submit" name="submit" id="sul-searchsubmit" value="Search Authors" />
</form>
<?php
if($search){ ?>
<h2 >Search Results for: <em><?php echo $search; ?></em></h2>
<a href="<?php the_permalink(); ?>">Back To Author Listing</a>
<?php } ?>

</div><!-- .author-search -->

<?php if (!empty($authors)) { ?>
<ul class="author-list">
<?php
// проход по каждому автору
foreach($authors as $author){
$author_info = get_userdata($author->ID);
?>
<li>
<?php echo get_avatar( $author->ID, 90 ); ?>
<h2><a href="<?php echo get_author_posts_url($author->ID); ?>"><?php echo $author_info->display_name; ?></a> - <?php echo count_user_posts( $author->ID ); ?> posts</h2>
<p><?php echo $author_info->description; ?></p>
<?php $latest_post = new WP_Query( "author=$author->ID&post_count=1" );
if (!empty($latest_post->post)){ ?>
<p><strong>Latest Article:</strong>
<a href="<?php echo get_permalink($latest_post->post->ID) ?>">
<?php echo get_the_title($latest_post->post->ID) ;?>
</a></p>
<?php } //endif ?>
<p><a href="<?php echo get_author_posts_url($author->ID); ?> ">Read <?php echo $author_info->display_name; ?> posts</a></p>
</li>
<?php
}
?>
</ul> <!-- .author-list -->
<?php } else { ?>
<h2>No authors found</h2>
<? } //endif ?>

<nav id="nav-single" style="clear:both; float:none; margin-top:20px;">
<h3 class="assistive-text">Post navigation</h3>
<?php if ($page != 1) { ?>
<span class="nav-previous"><a rel="prev" href="<?php the_permalink() ?>page/<?php echo $page - 1; ?>/"><span class="meta-nav">←</span> Previous</a></span>
<?php } ?>

<?php if ($page < $total_pages ) { ?>
<span class="nav-next"><a rel="next" href="<?php the_permalink() ?>page/<?php echo $page + 1; ?>/">Next <span class="meta-nav">→</span></a></span>
<?php } ?>
</nav>

<?php
// Вы ...

Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров

Comments are closed.