Запрос для пользовательского типа записей?
Я установил плагин Custom Post Type UI. После активации этого плагина я создал пользовательский тип записей под названием portfolio
. Теперь я хочу использовать его на странице портфолио во фронтенде. Как мне получить все записи пользовательского типа portfolio
?

query_posts( array( 'post_type' => array('post', 'portfolio') ) );
который показывает как обычные записи, так и записи типа portfolio
или
query_posts('post_type=portfolio');
только для типа portfolio
.
Используйте как обычный WP Query - читайте в Кодексе: http://codex.wordpress.org/Function_Reference/query_posts#Usage и http://codex.wordpress.org/Function_Reference/query_posts#Post_.26_Page_Parameters
<?php
query_posts(array(
'post_type' => 'portfolio',
'showposts' => 10
) );
?>
<?php while (have_posts()) : the_post(); ?>
<h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
<p><?php echo get_the_excerpt(); ?></p>
<?php endwhile;?>

Это довольно старый ответ, но для ясности: это не тот способ, которым следует поступать. Это почти неизбежно приведёт к ошибкам 404 и множеству других проблем. Пожалуйста, ознакомьтесь с ответами @kaiser или этой статьёй о том, почему не стоит использовать query_posts()

Поздний ответ, так как основной ответ использует query_posts()
, что никогда не следует делать.
Используйте фильтр
Используйте фильтр pre_get_posts
и просто установите тип записи portfolio
для основного запроса. Используйте Условные теги для определения, где вы хотите применить этот фильтр.
Краткий пример
<?php
defined( 'ABSPATH' ) OR exit;
/* Plugin Name: (#6417) Тип записи "Portfolio" в запросе */
add_filter( 'pre_get_posts', 'wpse_6417_portfolio_posts' );
function wpse_6417_portfolio_posts( $query )
{
if (
! $query->is_main_query()
// Здесь мы можем проверить все Условные теги
OR ! $query->is_archive() // Например: Все архивы будут содержать оба типа записей
)
return $query;
$query->set( 'post_type', array( 'post', 'portfolio' ) );
return $query;
}
Отказ от ответственности
Приведённый выше код является плагином, но может быть просто помещён в файл functions.php
вашей темы (что не рекомендуется).

Почему не рекомендуется добавлять это в functions.php? Конечно, если администратор сайта сменит тему, ему всё равно нужно будет решить, как отображать портфолио на главной странице с новой темой. Так что, я бы сказал, что добавление этого в functions.php так же оправдано, как и в плагин. Или я что-то упускаю?

@PhillHealey Как вы сказали, данные будут невидимыми, и вам придётся копировать и вставлять код. Серьёзные изменения логики запросов лучше реализовывать через плагины, а отображение и стилизацию стоит оставлять в темах.

@PhillHealey Тип записи никогда не должен быть привязан к конкретной теме.

Добавьте этот код в функции вашей дочерней темы (рекомендуется), чтобы включить страницы вашего пользовательского типа записи (CPT) в основной цикл
add_action( 'pre_get_posts', 'add_custom_post_types_to_loop' );
function add_custom_post_types_to_loop( $query ) {
if ( is_home() && $query->is_main_query() )
$query->set( 'post_type', array( 'post', 'portfolio' ) );
return $query;
}
Источник http://codex.wordpress.org/Post_Types
Или создайте пользовательский шаблон страницы archive-portfolio.php, который будет отображать только страницы вашего CPT. Это нужно делать только если вы не добавили архивную страницу через настройки плагина.
Пример: 'has_archive' => true,
Вы также можете контролировать количество отображаемых страниц и порядок их отображения на архивной странице с помощью этого кода:
add_action( 'pre_get_posts', 'cpt_items' );
function cpt_items( $query ) {
if( $query->is_main_query() && !is_admin() && is_post_type_archive( 'portfolio' ) ) {
$query->set( 'posts_per_page', '8' );
$query->set( 'order', 'ASC' );
}
}
