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

Что-то вроде этого должно работать:
// Предполагая, что у вас установлен $author_id
// и ваш тип записи называется 'your_post_type'
$args = array(
'author' => $author_id,
'post_type' => 'your_post_type',
);
$author_posts = new WP_Query( $args );
if( $author_posts->have_posts() ) {
while( $author_posts->have_posts() ) {
$author_posts->the_post();
// заголовок, содержимое и т.д.
$author_posts->the_title();
$author_posts->the_content();
// у вас должен быть доступ ко всем тегам, которые обычно
// можно использовать в Цикле (The Loop)
}
wp_reset_postdata();
}
Справочник
Использование файла шаблона автора
Вы можете сделать это внутри шаблона автора:
author.php
-- этот файл должен находиться в директории вашей темы
<?php get_header(); ?>
<div id="content" class="narrowcolumn">
<!-- Это устанавливает переменную $curauth -->
<?php
$curauth = (isset($_GET['author_name'])) ?
get_user_by('slug', $author_name) :
get_userdata(intval($author));
?>
<h2>О: <?php echo $curauth->nickname; ?></h2>
<dl>
<dt>Веб-сайт</dt>
<dd><a href="<?php echo $curauth->user_url; ?>"><?php echo $curauth->user_url; ?></a></dd>
<dt>Профиль</dt>
<dd><?php echo $curauth->user_description; ?></dd>
</dl>
<h2>Записи автора <?php echo $curauth->nickname; ?>:</h2>
<ul>
<!-- Цикл (The Loop) -->
<?php
// Предполагая, что ваш тип записи называется 'your_post_type'
$args = array(
'author' => $curauth->ID,
'post_type' => 'your_post_type',
);
$author_posts = new WP_Query( $args );
if( $author_posts->have_posts() ) {
while( $author_posts->have_posts() ) {
$author_posts->the_post();
// заголовок, содержимое и т.д.
the_title();
the_content();
// у вас должен быть доступ ко всем тегам, которые обычно
// можно использовать в Цикле (The Loop)
}
wp_reset_postdata();
}
?>
<!-- Конец цикла -->
</ul>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Этот код шаблона author.php
беззастенчиво позаимствован из Кодекса и, вероятно, должен рассматриваться как отправная точка, а не конечный продукт.

Знаю, что получу за это критику... но я пытаюсь сделать это с помощью плагина "Allow PHP in Post and Pages", и кажется, что у него проблемы с оператором if. Я не могу понять почему, но он просто перестает что-либо делать, как только доходит до этого момента.

Код, который я опубликовал, предназначен для добавления в файл functions.php
или плагин. У меня нет опыта работы с плагином Allow PHP in Posts and Pages(?).

Как мне добавить его в functions.php? Я не очень силен в PHP. Полагаю, мне нужно поместить его в функцию, но я не уверен, как работать с add_action или как вызывать это со страницы.

Привет, отвечаю с опозданием, но я попробовал ваш способ для постов пользователя в CPT (events), однако столкнулся с ошибкой 500 на странице пользователя, у которого есть посты — страницы пользователей без постов (т.е. пустой запрос) работают нормально. Не могли бы вы взглянуть? Вот моя паста с шаблоном автора (не обращайте внимания на кастомные поля :) ): http://pastebin.com/NLNSYC0c. Заранее спасибо!

Обновление: Я разобрался, несмотря на ограниченные знания PHP. Оказалось, нужно заменить $author_posts->the_title();
на стандартный get_the_title() и т.д., и всё работает идеально (см. http://pastebin.com/1FHFGFQs). Спасибо, что направили меня в нужное русло (возможно, вы могли бы обновить ваше решение выше).

Я обновил код. Если get_the_title()
работает, тогда the_title()
и the_content()
тоже должны работать. (Оказывается, я делаю нечто очень похожее на сайте, который настраивал некоторое время назад.)

Первая часть работает отлично. Просто использовал get_the_author_meta('ID');
чтобы установить $author_id
.

Вы забыли закрывающую скобку в while-выражении:
while( $author_posts->have_posts()) {

Используйте хук pre_get_posts
для добавления вашего пользовательского типа записи в шаблон author.php
В файле functions.php добавьте следующий код. Это добавит ваш пользовательский тип записи в основной запрос, чтобы он отображался на странице автора
function wpse107459_add_cpt_author( $query ) {
if ( !is_admin() && $query->is_author() && $query->is_main_query() ) {
$query->set( 'post_type', array('post', 'YOUR_CUSTOM_POST_TYPE' ) );
}
}
add_action( 'pre_get_posts', 'wpse107459_add_cpt_author' );
С этим изменением вам не нужно вносить никаких правок в файлы шаблонов :-)

Привет @PieterGoosen Это почти идеально подходит для моих нужд, но я хотел бы отображать только CPT. В строке $query->set я мог бы просто удалить 'post', но это вызовет проблемы на главном блоге. Вы не подскажете, как мне настроить код так, чтобы он применялся только к пользовательским типам записей? В псевдокоде это выглядело бы так: if (post-type('cpt-name') { // выполнить код }, но я не могу найти решение.
