특정 게시물 형식의 get_post 만


10

내 "일반"게시물 형식 기사 만 포함 된 아카이브 목록을 만들려고합니다 (링크, 따로 보관, 인용 등은 아님).

has_post_format( 'standard' )아래 코드에, 또는 이와 유사한 것을 어떻게 구현 합니까?

get_posts특정 형식 유형 만 요청 하는 쿼리를 찾을 수 없습니다 .

<?php    
    // Get the posts
    $myposts = get_posts('numberposts=-1&orderby=post_date&order=DESC');     
?>

<?php foreach($myposts as $post) : ?>   

<?php    
    // Setup the post variables
    setup_postdata($post);

    $year = mysql2date('Y', $post->post_date);
    $month = mysql2date('n', $post->post_date);
    $day = mysql2date('j', $post->post_date);    
?>

<p>
    <span class="the_article">
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    </span>
    &nbsp;&nbsp;&nbsp;
    <span class="the_day">
        <?php the_time('j F Y'); ?>
    </span>
</p>

<?php endforeach; ?>

내 PHP 기술은 최상의 초보자 수준이므로 모든 도움을 주시면 감사하겠습니다.

답변:


20

실제로 분류법 관련 인수를에 전달할 수 없습니다 get_posts(). (편집 : 실제로, 가능합니다. Codex는 다소 불분명합니다. 소스를 보면 get_posts()마음에 래퍼입니다 WP_Query().) 메타 키 / 값과 게시물 유형 은 전달할 수 있지만 post와 같은 분류법 은 전달할 수 없습니다. 체재. 따라서이 줄의 경우 :

$myposts = get_posts('numberposts=-1&orderby=post_date&order=DESC');

WP_Query()오히려 get_posts()다음을 사용 하는 것이 좋습니다 .

$myposts = new WP_Query( array(
    'tax_query' => array(
        array(                
            'taxonomy' => 'post_format',
            'field' => 'slug',
            'terms' => array( 
                'post-format-aside',
                'post-format-audio',
                'post-format-chat',
                'post-format-gallery',
                'post-format-image',
                'post-format-link',
                'post-format-quote',
                'post-format-status',
                'post-format-video'
            ),
            'operator' => 'NOT IN'
        )
    )
) );

참고 : 예, 많은 중첩 배열입니다. 세금 쿼리는 까다로울 수 있습니다.

다음 단계는 루프 열기 / 닫기 문을 수정하는 것입니다. 다음을 변경하십시오.

<?php foreach($myposts as $post) : ?>

    <?php /* loop markup goes here */ ?>

<?php endforeach; ?>

...이에:

<?php if ( $myposts->have_posts() ) : while ( $myposts->have_posts() ) : $myposts->the_post(); ?>

    <?php /* loop markup goes here */ ?>

<?php endwhile; endif; ?>

<?php wp_reset_postdata(); ?>

실제 루프 마크 업 해야 제외하고는 동일하게 유지 할 수있을 그 호출에 더 이상 필요 setup_postdata( $post ):

<?php        
    $year = mysql2date('Y', $post->post_date);
    $month = mysql2date('n', $post->post_date);
    $day = mysql2date('j', $post->post_date);    
?>

<p>
    <span class="the_article">
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    </span>
    &nbsp;&nbsp;&nbsp;
    <span class="the_day">
        <?php the_time('j F Y'); ?>
    </span>
</p>

따라서 모든 것을 종합하면 다음과 같습니다.

<?php
// Only query posts with the
// "standard" post format, which
// requires *excluding* all other
// post formats, since neither the
// "post_format" taxonomy nor the
// "post-format-standard" taxonomy term
// is applied to posts without
// defined post formats
$myposts = new WP_Query( array(
    'tax_query' => array(
        array(                
            'taxonomy' => 'post_format',
            'field' => 'slug',
            'terms' => array( 
                'post-format-aside',
                'post-format-audio',
                'post-format-chat',
                'post-format-gallery',
                'post-format-image',
                'post-format-link',
                'post-format-quote',
                'post-format-status',
                'post-format-video'
            ),
            'operator' => 'NOT IN'
        )
    )
) );

// Open the loop
if ( $myposts->have_posts() ) : while ( $myposts->have_posts() ) : $myposts->the_post(); ?>

    $year = mysql2date('Y', $post->post_date);
    $month = mysql2date('n', $post->post_date);
    $day = mysql2date('j', $post->post_date);    
    ?>

    <p>
        <span class="the_article">
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
        </span>
        &nbsp;&nbsp;&nbsp;
        <span class="the_day">
            <?php the_time('j F Y'); ?>
        </span>
    </p>  
    <?php 

// Close the loop
endwhile; endif;

// Reset $post data to default query
wp_reset_postdata();

감사합니다. 초보자가 잘 이해하여 이해하기 쉽게 만들었습니다. 제쳐두고, 링크 및 표준 게시물 형식 만 사용하기 때문에 실제로 나머지를 건너 뛸 수 있습니다.
daba

1
예; 지원을 활성화 한 게시물 형식 만 포함하면 됩니다.
칩 베넷

get_posts ()는 실제로 WP_Query를 사용하므로 물론 분류 쿼리를 전달할 수 있으며 쿼리 문자열이 아닌 배열로 전달하면됩니다.
shabushabu

@shabushabu 감사합니다. 내 답변을 업데이트했습니다.
Chip Bennett

2

포스트 형식은 단지라는 분류에 조건을 미리 정의되어 post_format당신이 포스트 형식의 아카이브를 생성하기 위해 WP 템플릿 계층을 사용할 수 있어야하므로. taxonomy-post_format-post-format-standard.php테마의 루트에 있는 파일을 작성하기 만하면 해당 파일이 모든 표준 게시물을 출력하는 데 사용됩니다. 당신은 다른 형식 이름과 같은 중 하나와 '표준'으로 대체 할 수 있습니다 aside, link또는 video, 예를 들면 이렇게 taxonomy-post_format-post-format-video.php. 이 형식을 고수하는 한 다른 분류법에도 적용됩니다.taxonomy-{TAXONOMY_NAME}-{TERM_NAME}.php

사이드 바 또는 페이지 템플릿과 같은 사용자 정의 루프와 함께 게시물 형식을 표시하려면 @kaiser의 세금 쿼리를 사용할 수 있습니다. 분류를로 대체하고 post_format슬러그를로 대체하십시오 post-format-{FORMAT_NAME}.


고맙지 만 페이지 템플릿 내에 아카이브를 만들려고 노력하고 있으므로 다른 솔루션 중 하나를 사용하겠습니다. :
daba

1

서로 다른 두 가지 분류법. 하나의 경우, relation인수를 생략 할 수 있습니다 .

$args = array(
    'tax_query' => array(
        'relation' => 'AND',
        array(
            'taxonomy' => 'movie_janner',
            'field' => 'slug',
            'terms' => array( 'action', 'commedy' ) // Single terms as string - multiple as array
        ),
        array(
            'taxonomy' => 'actor',
            'field' => 'id',
            'terms' => array( 103, 115, 206 ),
            'operator' => 'NOT IN'
        )
    )
);

0

당신은 그런 트릭을 할 수 있습니다 :

<?php 
while( have_posts() ) : the_post();
get_post_format()==false? get_template_part( 'loop', 'posts' ) : false;
endwhile;
?>

표준 게시 형식의 get_post_format ()이 false를 반환하기 때문입니다. http://codex.wordpress.org/Function_Reference/get_post_format


실제로 이것은 작동하지만 페이징을 고려할 때 문제가 발생합니다. 당신이 뭔가를 할 경우 'posts_per_page' => 6와하지 표준 템플릿 4 개 게시물이 만 2 개 게시물이 아닌 표시되어야 6을 볼 수 있습니다. 쿼리를 필터링하는 것이 가장 좋은 방법입니다.
honk31
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.