Yalnızca belirli gönderi biçimlerinin get_postları


10

Sadece benim "normal" yazı biçimi makaleler (bağlantı, bir yana, alıntı, vb biçimleri değil) ile bir arşiv listesi oluşturmaya çalışıyorum.

has_post_format( 'standard' )Aşağıdaki koda nasıl veya benzer bir şey uygulayabilirim?

get_postsYalnızca belirli biçim türlerini isteyen bir sorgu bulamadım .

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

Benim php becerileri en iyi başlangıç ​​seviyesinde, bu yüzden herhangi bir yardım çok takdir edilecektir.

Yanıtlar:


20

Taksonomiyle ilgili bir argümanı gerçekten aktaramazsınız get_posts(). (Düzenleme: aslında, evet yapabilirsiniz. Kodeks sadece biraz belirsiz. Kaynağa bakmak, get_posts()kalbinde, sadece bir sarıcıdır WP_Query().) Meta anahtarları / değerleri ve yazı türlerini iletebilirsiniz , ancak yazı gibi sınıflandırmaları geçemezsiniz . biçim. Yani bu çizgi için:

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

Bunun WP_Query()yerine kullanmanızı tavsiye ederim 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'
        )
    )
) );

Not: evet, bu birçok iç içe dizidir. Vergi sorguları böyle zor olabilir.

Bir sonraki adım döngü açma / kapama ifadelerinizi değiştirmektir. Bunları değiştirin:

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

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

<?php endforeach; ?>

...buna:

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

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

<?php endwhile; endif; ?>

<?php wp_reset_postdata(); ?>

Gerçek döngü biçimlendirme gerektiğini hariç, aynı kalması mümkün olduğu çağrıya artık gerek 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>

Yani, hepsini bir araya getirmek:

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

teşekkürler, bir acemi güzel parçalayarak anlamak için gerçekten kolay. Sadece bir yana, bağlantı ve standart yazı biçimlerini kullandığım için, aslında gerisini atlayabilirim.
daba

1
Evet; yalnızca hangi destek biçimlerini desteklemeyi etkinleştirdiğinizi eklemeniz gerekir .
Chip Bennett

get_posts () aslında WP_Query kullanır, bu yüzden tabii ki sınıflandırma sorguları, sadece bir dizi olarak değil bir sorgu dizesi olarak geçirebilirsiniz.
shabushabu

@shabushabu bunun için teşekkürler. Cevabımı güncelledim.
Chip Bennett

2

Gönderi biçimleri, adlandırılan bir sınıflandırmada önceden tanımlanmış terimlerdir post_format, bu nedenle gönderi biçimi arşivleri oluşturmak için WP şablonu hiyerarşisini kullanabilmeniz gerekir. Sadece taxonomy-post_format-post-format-standard.phptemanızın kökünde bir dosya oluşturun ve bu dosya tüm standart yayınlarınızın çıktısını almak için kullanılacaktır. Diğer biçim adları gibi herhangi biriyle 'standart' yerini alabilir aside, linkya da video, örneğin bu yüzden taxonomy-post_format-post-format-video.php. Bu biçime bağlı kaldığınız sürece, diğer tüm sınıflandırmalar için de geçerlidir, btw:taxonomy-{TAXONOMY_NAME}-{TERM_NAME}.php

Yazı biçimlerini, örneğin kenar çubuğunuzda veya bir sayfa şablonunda özel bir döngü ile göstermek istiyorsanız, @kaiser adresinden vergi sorgusunu kullanabilirsiniz. Sadece sınıflandırma ile post_formatsümüklü böcek yerine post-format-{FORMAT_NAME}.


teşekkürler, ama bir sayfa şablonu içinde arşiv oluşturmaya çalışıyorum, bu yüzden diğer çözümlerden biriyle gideceğim :)
daba

1

İki farklı sınıflandırma için. Tek bir kişi için relationargümanı dışarıda bırakabilirsiniz .

$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

Bu şekilde hile yapabilirsiniz:

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

Bunun nedeni, standart yazı biçimi için get_post_format () yönteminin yanlış döndürmesidir. http://codex.wordpress.org/Function_Reference/get_post_format


aslında bu işe yarıyor, ama sayfalamayı düşündüğünüzde başınız derde girecek. Eğer böyle bir şey yaparsanız 'posts_per_page' => 6ve NOT standart şablonla 4 mesajlarını var, sadece 2 Mesajları değil görünür olmalıdır 6 göreceksiniz. Sorgu filtreleme gitmek için kanıt yoludur ..
honk31
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.