#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. Привет! Спасибо за ваш ответ. Я вижу, вы создали функцию, но когда я ее вызвал, она не работает… или я упускаю какой-то шаг?