맞춤 게시물 유형을 쿼리 하시겠습니까? [닫은]


16

Custom Post Type UI 플러그인 을 설치했습니다 . 이 플러그인을 활성화 한 후이라는 사용자 정의 게시물 유형을 만들었습니다 portfolio. 이제 프론트 엔드의 포트폴리오 페이지에서 이것을 사용하고 싶습니다. 사용자 정의 게시물 유형의 게시물을 모두portfolio 가져 오려면 어떻게합니까 ?

답변:


22
query_posts( array( 'post_type' => array('post', 'portfolio') ) );

일반 게시물과 portfolio유형 내부의 게시물을 모두 표시합니다.

또는

query_posts('post_type=portfolio');

오직 portfolio.

일반적인 WP 쿼리로 사용-코덱을 읽으십시오 : http://codex.wordpress.org/Function_Reference/query_posts#Usagehttp://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;?>

6
이것은 상당히 오래된 대답입니다. 그러나 분명히하기 위해이 작업을 수행 해야하는 방법이 없습니다. 그것은 필연적으로 404와 다른 많은 문제로 이어질 것입니다. @kaiser의 답변 또는 사용하지 말아야 할 이유에query_posts()
Stephen Harris

16

주요 답변이 사용하는 늦은 답변 query_posts()절대로 수행 해서는 안됩니다 .

필터 사용

pre_get_posts필터를 사용하고 portfolio기본 쿼리에 대한 게시물 유형을 설정하십시오 . 조건부 태그 를 사용 하여이 필터를 사용할 위치를 결정 하십시오 .

빠른 예

<?php
defined( 'ABSPATH' ) OR exit;
/* Plugin Name: (#6417) "Portfolio" post type in query */

add_filter( 'pre_get_posts', 'wpse_6417_portfolio_posts' );
function wpse_6417_portfolio_posts( $query )
{
    if (
        ! $query->is_main_query()
        // Here we can check for all Conditional Tags
        OR ! $query->is_archive() // For e.g.: Every archive will feature both post types
    )
        return $query;

    $query->set( 'post_type', array( 'post', 'portfolio' ) );

    return $query;
}

기권

위의 코드는 플러그인이지만 functions.php테마 파일에 채워 넣을 수 있습니다 ( 권장 하지 않음).


왜 함수에 추가하지 않는 것이 좋습니까? 확실히 사이트 관리자가 테마를 변경하면 어쨌든이 새로운 테마로 홈 페이지에 포트폴리오를 표시하는 방법을 다루어야합니다. 따라서 플러그인이 아닌 함수에 이것을 추가하는 것이 타당하다고 말하고 싶습니다. 아니면 뭔가 빠졌습니까?
힐 힐리

@PhillHealey 당신이 말했듯이, 데이터는 보이지 않을 것이고 코드를 복사하여 붙여 넣어야 할 것입니다. 쿼리에 대한 강력한 논리 수정은 플러그인을 통해 가장 잘 제공되며 표시 및 스타일은 테마로 유지해야합니다.
카이저

해당 코드가 테마에만 해당되는 경우는 아닙니다.
Phill Healey

@PhillHealey 게시물 유형은 테마에만 국한 되지 않아야합니다.
카이저

좋아, 절대 값보다 tit-for-tat에 들어가고 싶다면 좋아. 그러나 특정 디자인 코드를 플러그인으로 푸시해서는 안된다고 말하는 것은 맞지 않습니다. 적절하지 않은 경우가 많습니다.
Phill Healey

4

이 코드를 자녀 테마 기능 파일 (권장)에 추가하여 단일 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

또는 CPT 페이지 만 표시 할 사용자 정의 archive-portfolio.php 페이지 템플릿만듭니다 . 플러그인 설정을 사용하여 아카이브 페이지를 추가하지 않은 경우에만 수행해야합니다.

예 : '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' );

    }

}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.