wp_get_archives() │ WP 1.2.0
Виводить список посилань на сторінки архівів за датою (дні, місяці, роки).
Ця функція є тегом шаблону і може бути використана будь-де шаблону.
1 раз – 0.004392 сек
(дуже повільно) | 50000 разів – 111.96 сек
(гальмо) |
PHP 7.0.5, WP 4.4.2
Повертає
null|Строку. Рядок коли результат повертається.
Шаблон використання
$ args = array (
'type' => 'monthly',
'limit' => '', // при '0' отримаємо помилку синтаксису (значення потрібно вказувати числом або порожнім рядком)
'format' => 'html',
'before' => '',
'after' => '',
'show_post_count' => false,
'echo' => 1,
'post_type' => 'post',
);
wp_get_archives ($ args);
Використання
wp_get_archives ($ args);
- type
(рядок) Тип списку може бути:
yearly– Посилання на сторінки архівів за роками.monthly– Список посилань на сторінки архівів за місяцями (за замовчуванням).daily– Список посилань на сторінки архівів по днях.weekly– Список посилань на сторінки архівів по тижнях.postbypost– Список посилань на пости відсортовані за датою.alpha– теж що і “postbypost”, тільки сортування проходитиме за заголовком статті.
Типово: ‘monthly’
- limit
(число) - Кількість посилань на архіви, які потрібно отримати.
За замовчуванням без обмеження. - format
(рядок) Формат списку, що повертається. Доступні значення:
html– HTML тег <li> до та після посилання (за замовчуванням).option– Список, що випадає <select>.link– Усередині HTML <link>.custom– Довільний тег, використовуйте аргументи beforeта after.
За замовчуванням: ‘html’
- before
(рядок) - Текст (html тег) до посилання. Працює лише тоді, коли у параметрі
formatвстановлено значення
htmlабо
custom.
За замовчуванням: ” - after
(рядок) - Текст (html тег) після заслання. Працює лише тоді, коли у параметрі
formatвстановлено значення
htmlабо
custom.
За замовчуванням: ” - show_post_count
(логічний) - Показувати кількість записів поруч із посиланням. Працює з усіма типами виводу (
type), крім
postbypost.
– 1 (True)
– 0 (False) – Default
Типово: false - echo
(логічний) - Виводити результат на екран (за замовчуванням) або повертати для подальшого оброблення (false).
Типово: true - post_type
(рядок) - Назва типу запису. З версії 4.4.
За замовчуванням: ‘post’
Приклади
#1 Виведемо архів записів згрупованих за місяцями.
Будуть показані лише останні 12 місяців:
<?php wp_get_archives('type=monthly&limit=12'); ?> #2 Виведемо архів записів згрупованих днями.
Будуть показані лише останні 15 днів:
<?php wp_get_archives('type=daily&limit=15'); ?> #3 Виведемо список останніх 20 постів і відсортуємо його за заголовками:
<?php wp_get_archives('type=postbypost&limit=20&format=custom'); ?> #4 Виведемо список архіву, що випадає, по місяцях в HTML тегу <select>. Поруч буде зазначено кількість постів за кожний місяць:
<select name="archive-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
<option value=""><?php echo esc_attr( __( 'Select Month' ) )); ?></option>
<?php wp_get_archives( 'type=monthly&format=option&show_post_count=1' ); ?>
</select>
#5 Виведемо список усіх постів у алфавітному порядку.
Може стати в нагоді для карти сайту:
<?php wp_get_archives('type=alpha'); ?> #6 Додамо rel=nofollow посиланням зі списку
Якщо потрібно додати rel=”nofollow” всім посиланням з отриманого списку, можна використовувати такий виклик функції:
$out = wp_get_archives('echo=0&type=postbypost&limit=3&format=html');
echo str_replace('<a', '<a rel="nofollow"', $out );
нотатки
- Дивіться: get_archives_link()
- Global. wpdb. $wpdb WordPress database abstraction object.
- Global. WP_Locale. $wp_locale WordPress date and time locale object.
список змін
| З версії 1.2.0 | Введено. |
| З версії 4.4.0 | The $post_type argument був added. |
| З версії 5.2.0 | $year , $monthnum , $ day , і $w arguments були added. |
wp get archives WP 6.0.2
function wp_get_archives( $args = '' ) { Global $wpdb, $wp_locale; $defaults = array( 'type' => 'monthly', 'limit' => '', 'format' => 'html', 'before' => '', 'after' => '', 'show_post_count' => false, 'echo' => 1, 'order' => 'DESC', 'post_type' => 'post', 'year' => get_query_var( 'year' ), 'monthnum' => get_query_var( 'monthnum' ), 'day' => get_query_var( 'day' ), 'w' => get_query_var( 'w' ), ); $parsed_args = wp_parse_args($args, $defaults); $post_type_object = get_post_type_object( $parsed_args['post_type'] ); if ( ! is_post_type_viewable( $post_type_object ) ) { return; } $parsed_args['post_type'] = $post_type_object->name; if ( '' === $parsed_args['type'] ) { $parsed_args['type'] = 'monthly'; } if ( ! empty( $parsed_args['limit'] ) ) { $parsed_args['limit'] = absint( $parsed_args['limit'] ); $parsed_args['limit'] = 'LIMIT'. $parsed_args['limit']; } $order = strtoupper( $parsed_args['order'] ); if ( 'ASC' !== $order ) { $order = 'DESC'; } // Це what will separate dates on weekly archive links. $archive_week_separator = '–'; $sql_where = $wpdb->prepare( "WHERE post_type = %s AND post_status = 'publish'", $parsed_args['post_type'] ); /** * Filters the SQL WHERE clause for retrieving archives. * * @ Since 2.2.0 * * @param string $sql_where Додаток з SQL Query містить WHERE clause. * @param array $parsed_args An array of default arguments. */ $where = apply_filters( 'getarchives_where', $sql_where, $parsed_args); /** * Filters the SQL JOIN clause for retrieving archives. * * @ Since 2.2.0 * * @param string $sql_join Довідка про SQL Query містить JOIN clause. * @param array $parsed_args An array of default arguments. */ $join = apply_filters( 'getarchives_join', '', $parsed_args ); $output = ''; $last_changed = wp_cache_get_last_changed( 'posts' ); $limit = $parsed_args['limit']; if ( 'monthly' === $parsed_args['type'] ) { $query = "SELECT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date $order $limit"; $ key = md5 ($ query); $key = "wp_get_archives:$key:$last_changed"; $results = wp_cache_get($key, 'posts'); if ( ! $results ) { $results = $wpdb->get_results( $query ); wp_cache_set($key, $results, 'posts'); } if ($results) { $after = $parsed_args['after']; foreach ((array) $results as $result ) { $url = get_month_link( $result->year, $result->month ); if ( 'post' !== $parsed_args['post_type'] ) { $url = add_query_arg( 'post_type', $parsed_args['post_type'], $url ); } /* translators: 1: Month name, 2: 4-digit year. */ $text = sprintf( __( '%1$s %2$d' ), $wp_locale->get_month( $result->month ), $result->year ); if ( $parsed_args['show_post_count'] ) { $parsed_args['after'] = ' (' . $result->posts . ')' . $ after; } $selected = is_archive() && (string) $parsed_args['year'] === $result->year && (string) $parsed_args['monthnum'] === $result->month; $output .= get_archives_link( $url, $text, $parsed_args['format'], $parsed_args['before'], $parsed_args['after'], $selected ); } } } elseif ( 'yearly' === $parsed_args['type'] ) { $query = "SELECT YEAR(post_date) AS `year`, count(ID) як повідомлення FROM $wpdb->posts $join $where GROUP BY YEAR(post_date) ORDER BY post_date $order $limit"; $ key = md5 ($ query); $key = "wp_get_archives:$key:$last_changed"; $results = wp_cache_get($key, 'posts'); if ( ! $results ) { $results = $wpdb->get_results( $query ); wp_cache_set($key, $results, 'posts'); } if ($results) { $after = $parsed_args['after']; foreach ((array) $results as $result ) { $url = get_year_link($result->year); if ( 'post' !== $parsed_args['post_type'] ) { $url = add_query_arg( 'post_type', $parsed_args['post_type'], $url ); } $text = sprintf( '%d', $result->year ); if ( $parsed_args['show_post_count'] ) { $parsed_args['after'] = ' (' . $result->posts . ')' . $ after; } $selected = is_archive() && (string) $parsed_args['year'] === $result->year; $output .= get_archives_link( $url, $text, $parsed_args['format'], $parsed_args['before'], $parsed_args['after'], $selected ); } } } elseif ( 'daily' === $parsed_args['type'] ) { $query = "SELECT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, DAYOFMONTH(post_date) AS `dayofmonth`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date), DAYOFMONTH(post_date) ORDER BY post_date $order $limit"; $ key = md5 ($ query); $key = "wp_get_archives:$key:$last_changed"; $results = wp_cache_get($key, 'posts'); if ( ! $results ) { $results = $wpdb->get_results( $query ); wp_cache_set($key, $results, 'posts'); } if ($results) { $after = $parsed_args['after']; foreach ((array) $results as $result ) { $url = get_day_link( $result->year, $result->month, $result->dayofmonth ); if ( 'post' !== $parsed_args['post_type'] ) { $url = add_query_arg( 'post_type', $parsed_args['post_type'], $url ); } $date = sprintf( '%1$d-%2$02d-%3$02d 00:00:00', $result->year, $result->month, $result->dayofmonth ); $text = mysql2date( get_option( 'date_format' ), $date ); if ( $parsed_args['show_post_count'] ) { $parsed_args['after'] = ' (' . $result->posts . ')' . $ after; } $selected = is_archive() && (string) $parsed_args['year'] === $result->year && (string) $parsed_args['monthnum'] === $result->month && (string) $parsed_args ['day'] === $result->dayofmonth; $output .= get_archives_link( $url, $text, $parsed_args['format'], $parsed_args['before'], $parsed_args['after'], $selected ); } } } elseif ( 'weekly' === $parsed_args['type'] ) { $week = _wp_mysql_week( '`post_date`' ); $query = "SELECT DISTINCT $week AS `week`, YEAR( `post_date` ) AS `yr`, DATE_FORMAT( `post_date`, '%Y-%m-%d' ) AS `yyyymmdd`, count( `ID ` ) AS `posts` FROM `$wpdb->posts` $join $where GROUP BY $week, YEAR( `post_date` ) ORDER BY `post_date` $order $limit"; $ key = md5 ($ query); $key = "wp_get_archives:$key:$last_changed"; $results = wp_cache_get($key, 'posts'); if ( ! $results ) { $results = $wpdb->get_results( $query ); wp_cache_set($key, $results, 'posts'); } $arc_w_last = ''; if ($results) { $after = $parsed_args['after']; foreach ((array) $results as $result ) { if ( $result->week != $arc_w_last ) { $arc_year = $result->yr; $arc_w_last = $result->week; $arc_week = get_weekstartend( $result->yyyymmdd, get_option( 'start_of_week' ) ); $arc_week_start = date_i18n( get_option( 'date_format' ), $arc_week['start'] ); $arc_week_end = date_i18n( get_option( 'date_format' ), $arc_week['end'] ); $url = add_query_arg( array( 'm' => $arc_year, 'w' => $result->week, ), home_url( '/' ) ); if ( 'post' !== $parsed_args['post_type'] ) { $url = add_query_arg( 'post_type', $parsed_args['post_type'], $url ); } $text = $arc_week_start. $archive_week_separator . $arc_week_end; if ( $parsed_args['show_post_count'] ) { $parsed_args['after'] = ' (' . $result->posts . ')' . $ after; } $selected = is_archive() && (string) $parsed_args['year'] === $result->yr && (string) $parsed_args['w'] === $result->week; $output .= get_archives_link( $url, $text, $parsed_args['format'], $parsed_args['before'], $parsed_args['after'], $selected ); } } } } elseif ( ( 'postbypost' === $parsed_args['type'] ) || ( 'alpha' === $parsed_args['type'] ) ) { $orderby = ( 'alpha' === $parsed_args['type'] ) ? 'post_title ASC': 'post_date DESC, ID DESC'; $query = "SELECT * FROM $wpdb->posts $join $where ORDER BY $orderby $limit"; $ key = md5 ($ query); $key = "wp_get_archives:$key:$last_changed"; $results = wp_cache_get($key, 'posts'); if ( ! $results ) { $results = $wpdb->get_results( $query ); wp_cache_set($key, $results, 'posts'); } if ($results) { foreach ((array) $results as $result ) { if ( '0000-00-00 00:00:00' !== $result->post_date ) { $url = get_permalink($result); if ( $result->post_title ) { /** Цей filter is documented в wp-includes/post-template.php */ $text = strip_tags( apply_filters( 'the_title', $result->post_title, $result->ID ) ); } else { $text = $result->ID; } $selected = get_the_ID() === $result->ID; $output .= get_archives_link( $url, $text, $parsed_args['format'], $parsed_args['before'], $parsed_args['after'], $selected ); } } } } if ( $parsed_args['echo'] ) { echo $output; } else { return $output; } } Зв’язані функції