wp_sitemaps_posts_query_args
Позволяет изменить параметры запроса WP_Query для карты сайта записей (постов).
Использование
add_filter( 'wp_sitemaps_posts_query_args', 'wp_kama_sitemaps_posts_query_args_filter', 10, 2 ); /** * Function for `wp_sitemaps_posts_query_args` filter-hook. * * @param array $args Array of WP_Query arguments. * @param string $post_type Post type name. * * @return array */ function wp_kama_sitemaps_posts_query_args_filter( $args, $post_type ){ // filter... return $args; }
- $args(массив)
Массив параметров, которые будут переданы в WP_Query при получении постов для карты сайта.
array( 'orderby' => 'ID', 'order' => 'ASC', 'post_type' => $post_type, 'posts_per_page' => wp_sitemaps_get_max_urls( $this->object_type ), 'post_status' => array( 'publish' ), 'no_found_rows' => true, 'update_post_term_cache' => false, 'update_post_meta_cache' => false, 'ignore_sticky_posts' => true, )
- $post_type(строка)
- Типа записи, для которого фильтруются параметры запроса.
Примеры
#1 Исключим записи из карты сайта
Допустим вы разрабатываете плагин, который устанавливает некоторым страницам метатег noindex, неплохо бы также исключить эти страницы из карты сайта.
add_filter( 'wp_sitemaps_posts_query_args', 'kama_sitemaps_posts_query_args', 10, 2 ); function kama_sitemaps_posts_query_args( $args, $post_type ) { // не наш тип записи if ( 'post' !== $post_type ) { return $args; } // учтем что этот параметр может быть уже установлен $args['post__not_in'] = isset( $args['post__not_in'] ) ? $args['post__not_in'] : array(); // Исключаем посты $args['post__not_in'][] = 12; $args['post__not_in'][] = 24; return $args; }
Список изменений
С версии 5.5.0 | Введена. |
С версии 6.1.0 | Added ignore_sticky_posts default parameter. |
Где вызывается хук
wp_sitemaps_posts_query_args
wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php 237-251
$args = apply_filters( 'wp_sitemaps_posts_query_args', array( 'orderby' => 'ID', 'order' => 'ASC', 'post_type' => $post_type, 'posts_per_page' => wp_sitemaps_get_max_urls( $this->object_type ), 'post_status' => array( 'publish' ), 'no_found_rows' => true, 'update_post_term_cache' => false, 'update_post_meta_cache' => false, 'ignore_sticky_posts' => true, // Sticky posts will still appear, but they won't be moved to the front. ), $post_type );