Chỉ get_posts của các định dạng bài đăng nhất định


10

Tôi đang cố gắng tạo một danh sách lưu trữ chỉ với các bài viết định dạng bài đăng "bình thường" của tôi (không phải các định dạng liên kết, trích dẫn, trích dẫn, v.v.).

Làm thế nào tôi có thể thực hiện has_post_format( 'standard' ), hoặc một cái gì đó tương tự, vào mã dưới đây?

Tôi chưa thể tìm thấy một truy vấn get_postschỉ yêu cầu các loại định dạng cụ thể.

<?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; ?>

Kỹ năng php của tôi ở mức độ mới bắt đầu tốt nhất, vì vậy bất kỳ trợ giúp sẽ được đánh giá cao.

Câu trả lời:


20

Bạn thực sự không thể vượt qua một đối số liên quan đến phân loại get_posts(). (Edit:. Trên thực tế, có bạn có thể Codex chỉ là một chút không rõ ràng Nhìn vào nguồn,. get_posts()Là, tại trái tim của nó, chỉ là một wrapper cho WP_Query().) Bạn có thể vượt qua các phím meta / giá trị, và sau loại , nhưng không phân loại như bài định dạng. Vì vậy, đối với dòng này:

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

Tôi khuyên bạn nên sử dụng WP_Query()chứ không phải 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'
        )
    )
) );

Lưu ý: có, đó là rất nhiều mảng lồng nhau. Truy vấn thuế có thể là khó khăn như thế.

Bước tiếp theo là sửa đổi các câu lệnh đóng / mở vòng lặp của bạn. Thay đổi những điều này:

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

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

<?php endforeach; ?>

... đến đây:

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

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

<?php endwhile; endif; ?>

<?php wp_reset_postdata(); ?>

Đánh dấu vòng lặp thực tế của bạn sẽ có thể giữ nguyên, ngoại trừ việc bạn không còn cần phải gọi 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>

Vì vậy, kết hợp tất cả lại với nhau:

<?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();

cảm ơn, bạn đã làm cho người mới bắt đầu thực sự dễ hiểu bằng cách phá vỡ nó một cách độc đáo. Tôi đoán vì tôi chỉ sử dụng sang một bên, liên kết và định dạng bài đăng tiêu chuẩn, tôi thực sự có thể bỏ qua phần còn lại.
daba

1
Đúng; bạn chỉ cần bao gồm bất kỳ định dạng bài đăng nào bạn đã bật hỗ trợ.
Chip Bennett

get_posts () thực sự sử dụng WP_Query, vì vậy tất nhiên bạn có thể chuyển các truy vấn phân loại, chỉ cần chuyển chúng dưới dạng một mảng chứ không phải là một chuỗi truy vấn.
shabushabu

@shabushabu cảm ơn vì điều đó. Tôi đã cập nhật câu trả lời của mình.
Chip Bennett

2

Định dạng bài đăng chỉ là thuật ngữ được xác định trước trong phân loại được gọi post_format, vì vậy bạn sẽ có thể sử dụng phân cấp mẫu WP để tạo lưu trữ định dạng bài đăng. Chỉ cần tạo một tệp được gọi taxonomy-post_format-post-format-standard.phptrong thư mục gốc của chủ đề của bạn và tệp đó sẽ được sử dụng để xuất tất cả các bài đăng tiêu chuẩn của bạn. Bạn có thể thay thế 'tiêu chuẩn' bằng bất kỳ tên định dạng nào khác, như aside, linkhoặc video, vd taxonomy-post_format-post-format-video.php. Điều này hoạt động cho bất kỳ phân loại khác, btw, miễn là bạn tuân theo định dạng này:taxonomy-{TAXONOMY_NAME}-{TERM_NAME}.php

Nếu bạn muốn hiển thị các định dạng bài đăng với một vòng lặp tùy chỉnh, ví dụ như trong thanh bên hoặc trong mẫu trang, thì bạn có thể sử dụng truy vấn thuế từ @kaiser. Chỉ cần thay thế phân loại bằng post_formatvà sên bằng post-format-{FORMAT_NAME}.


cảm ơn, nhưng tôi đang cố gắng tạo tài liệu lưu trữ trong một mẫu trang, vì vậy tôi sẽ đi với một trong những giải pháp khác :)
daba

1

Đối với hai nguyên tắc phân loại khác nhau. Đối với một trong những duy nhất, bạn có thể để lại relationarg.

$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

Bạn có thể thực hiện thủ thuật như vậy:

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

Đó là bởi vì get_post_format () cho định dạng bài đăng tiêu chuẩn trả về sai. http://codex.wordpress.org/Function_Reference/get_post_format


thực tế điều này không hoạt động, nhưng bạn sẽ gặp rắc rối, khi bạn xem xét phân trang. Nếu bạn làm một cái gì đó thích 'posts_per_page' => 6và có 4 bài đăng với mẫu KHÔNG chuẩn, bạn sẽ chỉ thấy 2 bài viết, không phải là 6 bài viết sẽ hiển thị. lọc truy vấn là cách chứng minh để đi ..
honk31 20/07/2015
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.