Вопрос или проблема
Я пытаюсь получить страницу, на которой будут перечислены все мои записи (тип записи = post
) в архиве.
Я могу сделать это с пользовательскими типами записей, используя get_post_type_archive_link()
, но использование get_post_type_archive_link('post')
для получения URL-адреса страницы всех записей не работает так же.
Также использование get_permalink()
или get_permalink( get_option( 'page_for_posts' ) )
возвращает только ссылку одной записи.
Пример:
Я хотел бы получить ссылку вроде www.example.com/posts/
или другую, аналогично тому, как пользовательский тип записи, когда использование get_post_type_archive_link('news')
приводит к www.example.com/news/
.
Могу ли я получить список записей не на главной странице? Это возможно?
Спасибо за помощь!
Я использую шорткод:
function shortcode_article_list() {
$posts_array = get_posts( array('posts_per_page' => -1, 'orderby' => 'date', 'order' => 'DESC', 'post_type' => 'post', 'post_status' => 'publish') );
$output="<ul>";
foreach ($posts_array as $post) {
$a = explode(' ', $post->post_date);
$output .= '<li><a href="' . home_url("https://wordpress.stackexchange.com/") . $post->post_name . '.html">' . $post->post_title . '</a> (' . $a[0] . ')</li>';
}
$output .= '</ul>';
return $output;
}
add_shortcode('article_list', 'shortcode_article_list');
Возможно, из этого есть что-то, что вы можете использовать.
Ответ или решение
Для создания архива постов в WordPress и получения ссылки на страницу с архивом, используется функция get_post_type_archive_link()
, однако, как вы отметили, эта функция не работает для стандартного типа постов post
так же, как для пользовательских типов записей. Давайте детализируем решение данной задачи, чтобы все ваши посты (тип = post
) отображались в архиве, а вы могли получить на этот архив ссылку.
Шаг 1: Понимание архитектуры WordPress
В WordPress по умолчанию страница архивов для постов доступна по адресу, указанному в настройках. В большинстве случаев, при правильной настройке, вы можете найти все ваши посты по адресу www.example.com/blog/
или www.example.com/news/
, в зависимости от того, как вы настраиваете постоянные ссылки. Если вы не сможете получить такую ссылку с помощью функции get_post_type_archive_link
, воспользуйтесь следующими методами.
Шаг 2: Использование функции home_url()
Для создания URL-адреса, который будет вести к архиву всех постов, используйте home_url()
вместе с относительным путем. Например, если ваш сайт на основе настройки постоянных ссылок просто отвечает на www.example.com/blog/
, вы можете сделать это:
$archive_link = home_url('/blog/');
Этот код создаст ссылку на архив, используя базовый URL вашего сайта и относительный путь к архиву. Измените /blog/
на нужный вам путь, если у вас он другой.
Шаг 3: Использование get_permalink()
Если у вас настроена страница для отображения блога, вы можете использовать функцию get_permalink()
, чтобы получить ссылку на эту страницу:
$blog_page_id = get_option('page_for_posts');
$archive_link = get_permalink($blog_page_id);
Этот вариант позволяет вам динамически получать ссылку на страницу, которая отображает ваши все публикации в виде постов.
Шаг 4: Создание шорткода для вывода списка постов
Учитывая ваш пример шорткода, вы можете применить уже используемую функцию, чтобы создать полноценный шорткод для генерации списка всех ваших постов на архивной странице:
function shortcode_article_list() {
$posts_array = get_posts(array(
'posts_per_page' => -1,
'orderby' => 'date',
'order' => 'DESC',
'post_type' => 'post',
'post_status' => 'publish'
));
$output = "<ul>";
foreach ($posts_array as $post) {
// Обработка даты
$date_parts = explode(' ', $post->post_date);
$post_url = get_permalink($post); // Получаем ссылку на пост
$output .= "<li><a href='{$post_url}'>{$post->post_title}</a> ({$date_parts[0]})</li>";
}
$output .= "</ul>";
return $output;
}
add_shortcode('article_list', 'shortcode_article_list');
Этот шорткод генерирует список всех опубликованных постов с корректными ссылками на каждую запись.
Заключение
Таким образом, вы можете легко получать ссылки на архив записей и выводить список всех постов на странице, отличной от главной. Используйте подходящие функции WordPress для построения нужных вам адресов и создания списка постов. Убедитесь, что структура постоянных ссылок вашего сайта правильно настроена, чтобы ссылки работали как ожидается.
При правильной настройке и использовании указанных выше методов у вас не возникнет проблем с получением URL для страницы архивов, а ваши посты будут видны всем пользователям.