При разработке сайта с объявлениями или объектами недвижимости на WordPress часто возникает задача: позволить пользователям добавлять свои объекты и затем управлять ими — просматривать список и редактировать при необходимости.
В этом материале разберём, как реализовать листинг пользовательских постов (property) с помощью WP_Query, а также как добавить ссылку на редактирование для каждого объявления.
Создаём шаблон страницы для личного кабинета
Первым делом нам понадобится новый шаблон страницы. Он будет выводить все объявления, добавленные текущим пользователем.
В папке вашего плагина или темы создайте новый файл, например:
template-list-properties.php
В начале файла обязательно укажите мета-комментарий, чтобы WordPress распознал шаблон:
<?php
/**
* Template Name: List Personal Properties
*/
После этого создайте страницу в админке WordPress (в разделе Страницы) и выберите для неё этот шаблон.
Назовите её, например, “Мои объявления” или “My Properties”.
Проверяем авторизацию пользователя
Поскольку эта страница должна показывать объявления только авторизованным пользователям, начнём шаблон с проверки входа:
if ( ! is_user_logged_in() ) {
echo '<p>Для доступа к списку объявлений необходимо войти в систему.</p>';
return;
}
Если пользователь не авторизован — показываем сообщение, иначе продолжаем.
Используем WP_Query для вывода объявлений пользователя
Далее создаём запрос WP_Query, который достанет все записи типа property, созданные текущим пользователем.
$current_user = wp_get_current_user();
$args = [
'post_type' => 'property',
'posts_per_page' => -1, // выводим все
'post_status' => ['publish', 'pending', 'draft', 'future'],
'author' => $current_user->ID,
];
$user_properties = new WP_Query($args);
Здесь мы указываем:
post_type— тип записей (в вашем случаеproperty);post_status— набор статусов, которые стоит показывать (опубликованные, черновики, на модерации и т.д.);author— текущий пользователь.
Выводим список объектов
Теперь, если в $user_properties есть посты, запускаем цикл:
if ( $user_properties->have_posts() ) :
echo '<div class="property-list">';
while ( $user_properties->have_posts() ) : $user_properties->the_post();
?>
<div class="property-item">
<h3><?php the_title(); ?></h3>
<a href="<?php the_permalink(); ?>">Просмотр</a>
</div>
<?php
endwhile;
echo '</div>';
else :
echo '<p>Вы ещё не добавили ни одного объявления.</p>';
endif;
wp_reset_postdata();
Каждый объект выводится в отдельном контейнере .property-item.
Позже сюда можно добавить любые данные — цену, статус, миниатюру, дату и т.д.
Добавляем ссылку на редактирование
Чтобы пользователь мог редактировать свои объявления, нужно добавить ссылку, ведущую на страницу редактирования.
Предположим, у нас уже есть страница “Редактировать объявление” с шаблоном для обработки формы редактирования.
Допустим, её URL — /edit-property/.
Мы можем добавить GET-параметр edit, чтобы передать ID конкретного объявления:
$edit_page_url = '/edit-property/';
$edit_url = add_query_arg('edit', get_the_ID(), $edit_page_url);
Теперь добавляем эту ссылку в вывод:
<div class="property-item">
<h3><?php the_title(); ?></h3>
<a href="<?php the_permalink(); ?>">Просмотр</a> |
<a href="<?php echo esc_url( $edit_url ); ?>">Редактировать</a>
</div>
Таким образом, каждая карточка будет содержать кнопку «Редактировать», ведущую на соответствующую страницу, например:
/edit-property/?edit=83
На странице редактирования можно обработать этот параметр ($_GET['edit']) и подгрузить нужный пост для редактирования.
Советы по улучшению
- Добавьте визуальные статусы — можно подсветить объявления по их статусу:
- опубликованные — зелёным,
- ожидающие модерации — жёлтым,
- черновики — серым.
- Реализуйте пагинацию — если объявлений много, используйте стандартные функции WordPress для навигации между страницами.
- Добавьте стили — для наглядности можно добавить простой CSS:
.property-item { background: #fff; margin-bottom: 20px; padding: 20px; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); } - Храните ссылку на страницу редактирования в настройках — чтобы администратор мог легко поменять её без правки кода.
Заключение
Используя WP_Query, можно гибко управлять тем, какие данные выводить пользователю.
Листинг собственных объявлений — один из самых востребованных сценариев в проектах с пользовательским контентом.
Добавив ссылку на редактирование, вы создаёте полноценный личный кабинет, где авторы могут управлять своими объектами без доступа в админку.