Intereting Posts
Как использовать wp_nav_menu для создания выпадающего меню выбора? Могу ли я установить post_type query_var при нажатии ссылки? Получите пользователей по крайней мере один пост Категории экспорта и импорта WP SQL Изменение URL-адреса сайта WordPress в новом домене Удалить «показать кнопки совместного доступа» метабокс JetPack из пользовательского типа сообщения Отдельные страницы WordPress CSS и JS-ссылки Как ограничить количество изображений, находящихся в принтере, в «Set Featured Image»? Ползунок не будет работать с пользовательским запросом Как узнать, существует ли сообщение с custom_field == X? Функция great () возвращает неопределенное свойство Как сохранить WP от повторного сжатия изображений Full Size Подключение к удаленной базе данных для wordpress на моем собственном сервере хостинга Как добавить класс в элемент вывода html в выпадающем меню пункта tinyMCE Перевод плагина в каталог MU-PLUGINS не работает

Архивы для пользовательских типов сообщений (без страниц)

В основном я хочу расширить виджет архивов по умолчанию, чтобы он не только отображал список {month: year} по умолчанию, но также включал мой новый настраиваемый тип сообщений.

В этом примере мне удалось получить новые элементы {month: year}, появляющиеся в списке архивов, но не нажав ни на что.

Затем в этом примере показано, как включить элементы в пользовательские типы сообщений в цикле и позволить им щелкнуть и вернуть фактические результаты.

Однако последняя проблема заключается в том, что при нажатии на элемент {month: year} в списке он также возвращает результаты из записей страницы. Мне нужно знать, как отфильтровать «Страницы» из моих результатов, так что это просто «Почтовые типы».

Код, который у меня есть в functions.php:

/** * Add custom Post Types to the Archives. */ add_filter( 'getarchives_where' , 'ucc_getarchives_where_filter' , 10 , 2 ); function ucc_getarchives_where_filter( $where , $r ) { $args = array( 'public' => true , '_builtin' => false ); $output = 'names'; $operator = 'and'; $post_types = get_post_types( $args , $output , $operator ); $post_types = array_merge( $post_types , array( 'post' ) ); $post_types = "'" . implode( "' , '" , $post_types ) . "'"; return str_replace( "post_type = 'post'" , "post_type IN ( $post_types )" , $where ); } /** * Add Custom Post Types to The Loop results. */ add_filter( 'request' , 'ucc_request_filter' ); function ucc_request_filter( $query ) { // Preview does not like having post_type set; feed is my personal preference. if ( empty( $query['preview'] ) && empty( $query['feed'] ) ) { $my_post_type = $query['post_type']; if ( empty( $my_post_type ) ) { $query['post_type'] = 'any'; } } return $query; } 

Solutions Collecting From Web of "Архивы для пользовательских типов сообщений (без страниц)"

заменить:

 return str_replace( "post_type = 'post'" , "post_type IN ( $post_types )" , $where ); 

с:

 return str_replace( "post_type = 'post'" , "post_type = 'YOUR_CUSTOM_TYPE'" , $where ); 

и измените YOUR_CUSTOM_TYPE на ваше фактическое имя типа персонализированного сообщения.

Обновить:

Если вы хотите, чтобы все типы, кроме страниц, изменили функцию abit на это:

 add_filter( 'getarchives_where' , 'ucc_getarchives_where_filter' , 10 , 2 ); function ucc_getarchives_where_filter( $where , $r ) { $args = array( 'public' => true , '_builtin' => false ); $output = 'names'; $operator = 'and'; $post_types = get_post_types( $args , $output , $operator ); $post_types = array_merge( $post_types , array( 'post' ) ); $post_types = "'" . implode( "' , '" , $post_types ) . "'"; //if page is somewhere in the middle then remove it $post_types = str_replace("'page',","", $post_types); //if page is somewhere the last type then remove it $post_types = str_replace("'page'","", $post_types); return str_replace( "post_type = 'post'" , "post_type IN ( $post_types )" , $where ); } 

и для получения результатов в цикле используйте это:

 add_filter( 'pre_get_posts' , 'ucc_include_custom_post_types' ); function ucc_include_custom_post_types( $query ) { global $wp_query; /* Don't break admin or preview pages. This is also a good place to exclude feed with !is_feed() if desired. */ if ( !is_preview() && !is_admin() && !is_singular() ) { $args = array( 'public' => true , '_builtin' => false ); $output = 'names'; $operator = 'and'; $post_types = get_post_types( $args , $output , $operator ); $post_types = array_merge( $post_types , array( 'post' ) ); //remove page form array: foreach($post_types as $key => $val){ if ($val =='page'){ unset($post_types[$key]); } } if ($query->is_feed) { /* Do feed processing here if you did not exclude it previously. This if/else * is not necessary if you want custom post types included in your feed. */ } else { $my_post_type = get_query_var( 'post_type' ); if ( empty( $my_post_type ) ) $query->set( 'post_type' , $post_types ); } } return $query; } не add_filter( 'pre_get_posts' , 'ucc_include_custom_post_types' ); function ucc_include_custom_post_types( $query ) { global $wp_query; /* Don't break admin or preview pages. This is also a good place to exclude feed with !is_feed() if desired. */ if ( !is_preview() && !is_admin() && !is_singular() ) { $args = array( 'public' => true , '_builtin' => false ); $output = 'names'; $operator = 'and'; $post_types = get_post_types( $args , $output , $operator ); $post_types = array_merge( $post_types , array( 'post' ) ); //remove page form array: foreach($post_types as $key => $val){ if ($val =='page'){ unset($post_types[$key]); } } if ($query->is_feed) { /* Do feed processing here if you did not exclude it previously. This if/else * is not necessary if you want custom post types included in your feed. */ } else { $my_post_type = get_query_var( 'post_type' ); if ( empty( $my_post_type ) ) $query->set( 'post_type' , $post_types ); } } return $query; }