Я построил пользовательскую страницу архива в WordPress
с помощью Timber
и метод маршрута. Страница работает хорошо и показывает комбинацию Custom Post Types
но канал в {url} / feed не существует.
примечание: предыдущий ответ был отредактирован, чтобы убрать запутанные побочные проблемы.
// create CPT (x 3)
register_post_type($name, array(
'label' => 'custom1',
'public' => true,
'capability_type' => 'page',
'supports' => array( 'title', 'author', 'excerpt', 'revisions', 'thumbnail'),
'taxonomies' => array('post_tag'),
'has_archive' => true
));
// CPT route
Routes::map('test/filter/:filter', function($params){
$query = array(
'post_type' => array('custom1', 'custom2', 'custom3' )
);
$filter = $params;
Routes::load('archive.php', $filter, $query, 200);
});
// paging CPT route
Routes::map('test/filter/:filter/page/:page', function($params){
$query = array(
'post_type' => array('custom1', 'custom2', 'custom3' ),
'paged' => intval($params['page'])
);
$filter = $params;
Routes::load('archive.php', $filter, $query, 200);
});
@sidonaldson: Ааааа, теперь я понимаю, что вы ищете! Да, это происходит на уровне WP, а не Timber
add_action( 'pre_get_posts', function ( $query ) {
if ( $query->is_main_query() && !is_admin() && is_post_type_archive('agency')) {
$query->set( 'post_type', array('post', 'custom', 'custom2') );
}
} );
@sidonaldson — это непроверенный ответ, но вот что можно сделать:
query_posts
в основном эквивалент WordPress кувалды, который будет влиять на RSS, нумерацию страниц и все остальное. Вот что должно работать …
$posts_query = array(
'post_type' => array('post', 'custom', 'custom' ),
'tag__in' => $tag_array,
'orderby' => 'date',
'post_status' => 'publish',
'paged' => $paged
);
// First let's get this set for pagination
query_posts($posts_query);
$context['posts'] = Timber::get_posts($posts_query);
$context['pagination'] = Timber::get_pagination();
// now let's use it to hit RSS
$post = new TimberPost('override_page_slug');
query_posts(array( 'p' => $post->ID ));
$context['post'] = $post;
Timber::render( 'page-override_page_slug.twig', $context );
Других решений пока нет …