Ссылка на архив страницы для записей, например, используя произвольные типы записей с get_post_type_archive_link.

Вопрос или проблема

Я пытаюсь получить страницу, на которой будут перечислены все мои записи (тип записи = 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/ на нужный вам путь, если у вас он другой.

Если у вас настроена страница для отображения блога, вы можете использовать функцию 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 для страницы архивов, а ваши посты будут видны всем пользователям.

Оцените материал
Добавить комментарий

Капча загружается...