Hanya get_posts dari format posting tertentu

10

Saya mencoba membuat daftar arsip dengan hanya artikel format posting "normal" (bukan tautan, samping, kutipan, dll.).

Bagaimana saya menerapkan has_post_format( 'standard' ), atau yang serupa, ke dalam kode di bawah ini?

Saya belum dapat menemukan permintaan get_postsyang hanya meminta jenis format tertentu.

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

Keahlian php saya ada di level pemula, jadi bantuan apa pun akan sangat dihargai.

daba
sumber

Jawaban:

20

Anda tidak dapat benar-benar menyampaikan argumen terkait taksonomi get_posts(). (Sunting: sebenarnya, ya Anda bisa. Codex hanya agak tidak jelas. Melihat sumbernya, get_posts()pada intinya, hanya pembungkus untuk WP_Query().) Anda dapat memberikan meta kunci / nilai, dan jenis posting , tetapi bukan taksonomi seperti pos format. Jadi untuk baris ini:

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

Saya akan merekomendasikan menggunakan WP_Query()daripada 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'
        )
    )
) );

Catatan: ya, itu banyak array bersarang. Permintaan pajak bisa rumit seperti itu.

Langkah selanjutnya adalah memodifikasi pernyataan buka / tutup loop Anda. Ubah ini:

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

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

<?php endforeach; ?>

...untuk ini:

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

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

<?php endwhile; endif; ?>

<?php wp_reset_postdata(); ?>

Markup loop Anda yang sebenarnya harus tetap sama, kecuali bahwa Anda tidak perlu menelepon lagi 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>

Jadi, kumpulkan semuanya:

<?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();
Chip Bennett
sumber
terima kasih, Anda membuatnya sangat mudah bagi pemula untuk memahaminya dengan memecahnya dengan baik. Saya menduga karena saya hanya menggunakan format samping, tautan, dan pos standar, saya sebenarnya dapat melewatkan sisanya.
daba
1
Iya; Anda hanya perlu menyertakan format posting mana saja yang telah Anda aktifkan dukungannya.
Chip Bennett
get_posts () benar-benar menggunakan WP_Query, jadi tentu saja Anda dapat meneruskan permintaan taksonomi, cukup kirimkan sebagai array dan bukan sebagai string kueri.
shabushabu
@shabushabu terima kasih untuk itu. Saya telah memperbarui jawaban saya.
Chip Bennett
2

Format posting adalah istilah yang sudah ditentukan sebelumnya dalam taksonomi yang disebut post_format, jadi Anda harus dapat menggunakan hierarki template WP untuk membuat arsip format posting. Cukup buat file yang disebut taxonomy-post_format-post-format-standard.phpdi root tema Anda dan file itu akan digunakan untuk menampilkan semua posting standar Anda. Anda dapat mengganti 'standar' dengan nama format lain, seperti aside, linkatau video, jadi misalnya taxonomy-post_format-post-format-video.php. Ini berfungsi untuk taksonomi lainnya, btw, selama Anda tetap menggunakan format ini:taxonomy-{TAXONOMY_NAME}-{TERM_NAME}.php

Jika Anda ingin menampilkan format posting dengan loop kustom, mis. Di bilah sisi atau dalam templat halaman, maka Anda dapat menggunakan kueri pajak dari @kaiser. Cukup gantikan taksonomi dengan post_formatsiput post-format-{FORMAT_NAME}.

shabushabu
sumber
terima kasih, tapi saya mencoba membuat arsip di dalam templat halaman, jadi saya akan pergi dengan salah satu solusi lain :)
daba
1

Untuk dua taksonomi yang berbeda. Untuk satu saja, Anda dapat relationmengabaikannya.

$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'
        )
    )
);
kaisar
sumber
0

Anda dapat melakukan trik seperti itu:

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

Itu karena get_post_format () untuk format posting standar mengembalikan false. http://codex.wordpress.org/Function_Reference/get_post_format

theogrost
sumber
sebenarnya ini bekerja, tetapi Anda akan mendapat masalah, ketika Anda mempertimbangkan paging. jika Anda melakukan sesuatu seperti 'posts_per_page' => 6dan memiliki 4 posting dengan BUKAN templat standar, Anda hanya akan melihat 2 posting, bukan 6 posting yang seharusnya terlihat. memfilter kueri adalah jalan buktinya ..
honk31