เฉพาะ get_posts ของโพสต์บางรูปแบบ


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())คุณสามารถส่งเมตาคีย์ / ค่าและประเภทโพสต์แต่ไม่ใช่ taxonomies เช่นโพสต์ รูปแบบ. ดังนั้นสำหรับบรรทัดนี้:

$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
ใช่; คุณจะต้องรวมรูปแบบโพสต์ที่คุณเปิดใช้งานการสนับสนุนเท่านั้น
Chip Bennett

get_posts () ใช้ WP_Query จริง ๆ แล้วดังนั้นคุณสามารถส่งผ่านการสืบค้น taxonomy เพียงแค่ส่งเป็น array และไม่ใช่สตริงการสืบค้น
shabushabu

@shabushabu ขอบคุณสำหรับสิ่งนั้น ฉันอัพเดตคำตอบแล้ว
Chip Bennett

2

รูปแบบการโพสต์เป็นเพียงคำนิยามที่กำหนดไว้ล่วงหน้าใน taxonomy ที่เรียกว่าpost_formatดังนั้นคุณควรจะสามารถใช้ลำดับชั้นของเทมเพลต WP เพื่อสร้างการเก็บถาวรรูปแบบการโพสต์ เพียงสร้างไฟล์ที่เรียกว่าtaxonomy-post_format-post-format-standard.phpในรูทของธีมของคุณและไฟล์นั้นจะถูกใช้เพื่อแสดงผลโพสต์มาตรฐานทั้งหมดของคุณ คุณสามารถใช้แทน 'มาตรฐาน' กับใด ๆ ของชื่อรูปแบบอื่น ๆ เช่นaside, linkหรือเพื่อให้เช่นvideo taxonomy-post_format-post-format-video.phpสิ่งนี้ใช้ได้กับอนุกรมวิธานอื่น ๆ เช่นกัน btw ตราบใดที่คุณยึดติดกับรูปแบบนี้:taxonomy-{TAXONOMY_NAME}-{TERM_NAME}.php

หากคุณต้องการแสดงรูปแบบการโพสต์ด้วยการวนซ้ำที่กำหนดเองเช่นในแถบด้านข้างของคุณหรือในเทมเพลตหน้าคุณสามารถใช้แบบสอบถามภาษีจาก @kaiser เพียงแค่ทดแทนอนุกรมวิธานด้วยและกระสุนด้วยpost_formatpost-format-{FORMAT_NAME}


ขอบคุณ แต่ฉันพยายามที่จะสร้างคลังข้อมูลภายในเทมเพลทดังนั้นฉันจะไปกับหนึ่งในโซลูชั่นอื่น ๆ :)
Daba

1

สำหรับ taxonomies ที่แตกต่างกันสองแบบ สำหรับหนึ่งเดียวคุณสามารถออกจากการ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 () สำหรับรูปแบบโพสต์มาตรฐานส่งคืนค่าเท็จ 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.