Создайте массив со всеми ссылками архива за годы (пользовательского типа записи).

#arrays #wordpress #custom-post-type #archive

Вопрос:

У меня есть пользовательский тип публикации под названием «документы», и мне нужно создать массив со всеми существующими ссылками на архив за год. Что-то вроде:

 array (
[0]=> 'http://www.example.com/2021/?post_type=papers'
[1]=> 'http://www.example.com/2019/?post_type=papers'// cause there's no post in 2020
[2]=> 'http://www.example.com/2017/?post_type=papers'
)
 

Мне сказали использовать get_archives() , но это просто дает мне сформированный список, а не массив, который я могу использовать для передачи другой функции. Или я делаю что-то не так?

Ответ №1:

Попробуй это:

   $links = wp_get_archives(array('echo'=>'0','format'=>'<link>'));
  $regex = '/b(https?|ftp|file)://[-A-Z0-9 amp;@#/%?=~_|$!:,.;]*[A-Z0-9 amp;@#/%=~_|$]/i';
  preg_match_all($regex, $links, $matches);
  $array_links = $matches[0];
  print_r($array_links);
 

Комментарии:

1. Привет! Спасибо за ваш ответ. Это дает мне массивы, кроме основного блога, без моих пользовательских типов сообщений. Есть ли способ настроить его таким образом? Я не нахожу части, где это определено.

2. Моя вина! Я просто добавил 'post_type' => 'myCPT' его в wp_get_archives() массив, и это сработало. Спасибо!!

3. Всегда пожалуйста 🙂

4. Могу я спросить, что /b(https?|ftp|file)://[-A-Z0-9 amp;@#/%?=~_|$!:,.;]*[A-Z0-9 amp;@#/%=~_|$]/i' это значит?

5. Это регулярное выражение может извлекать все ссылки из любой строки

Ответ №2:

Пожалуйста, попробуйте это —

 function get_archive_post_ids(){
    if( is_archive() ){
        global $wp_query;
        $post_ids = wp_list_pluck( $wp_query->posts, 'ID' );
    }
}
add_action( 'wp_enqueue_scripts', 'get_archive_post_ids' );
 

Комментарии:

1. Привет! Спасибо за ваш ответ. Я вижу, вы создали функцию, но когда я ее вызвал, она не работает… или я упускаю какой-то шаг?