只查询帖子格式为“音频”的帖子

时间:2014-07-12 作者:Desi

我试图只查询帖子格式为的帖子audio. 我很肯定我做错了。我能得到一些帮助吗?

    <?php get_header();?>

    <section id="content">
        <section id="latest-blogs">

            <?php
                $i=1;
                $temp = $wp_query;
                $wp_query = null;
                $wp_query = new WP_Query();
                $wp_query -> query(\'post-format-audio\'.\'&paged=\'.$paged)
            ?>

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

                <div class="article-wrapper">
                    <span class="top-left-corner"></span>
                    <span class="top-right-corner"></span>
                    <article id="post-<?php the_ID(); ?>">
                        <span class="top-corners"></span>
                        <time datetime="<?php the_time(\'c\'); ?>"><?php the_time(\'F j, Y\'); ?></time>
                        <?php
                            $myvalue = get_field( "buzzsprout_shortcode" ); 
                            echo do_shortcode("$myvalue");
                        ?>
                        <p class="read-emails"><a href="<?php the_permalink() ?>" rel="bookmark" title="View emails and comment on this episode.">View emails and comment on this episode</a></p>
                        <span class="bottom-corners"></span>
                    </article>
                    <span class="bottom-left-corner"></span>
                    <span class="bottom-right-corner"></span>
                </div>

            <?php endwhile;endif; ?>

            <div id="pagination">
                <?php my_paginate_links(); ?>
            </div>

        </section>
    </section>

    <?php get_sidebar(); ?>

    <?php get_footer(); ?>

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

在我们继续之前,我必须指出这一点:

            $i=1;
            $temp = $wp_query;
            $wp_query = null;
            $wp_query = new WP_Query();
            $wp_query -> query(\'post-format-audio\'.\'&paged=\'.$paged)
这与以下内容完全相同:

query_posts( \'post-format-audio\'.\'&paged=\'.$paged );
这太可怕了。当人们建议不要使用query_posts, 不只是功能不好,它的功能也不好。

谢天谢地有人告诉你WP_Query, 但是他们没有完成工作。

这就是您的查询循环的实际外观:

$args = array(
    \'post_format\' => \'post-format-audio\'
);
$q = new WP_Query( $args );
if ( $q->have_posts() ) {
    while( $q->have_posts() ) {
        $q->the_post();
        the_title(); // etc
    }
    wp_reset_postdata(); // clean up after ourselves
}
重要的一点是,post格式在内部保存为自定义分类法,分类法名称为“post\\u format”。

But even this is bad!

我在原来的代码中看到,您完全放弃了原来的主查询(还有另一个原因query_posts 是可怕的)。你应该做的是pre_get_posts 筛选以在主查询运行之前修改它,这样您就不必丢弃它,浪费时间并降低页面速度。这种方式还为您提供了Core免费提供的所有分页和其他功能。

因此,如果这是您的主页,您可以这样做:

function audio_only( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( \'post_format\', \'post-format-audio\' );
    }
}
add_action( \'pre_get_posts\', \'audio_only\' );
在插件或functions.php 您的主页将仅显示带有音频帖子格式的帖子。您可以在任何有主循环的地方,使用它覆盖单个术语存档、搜索、RSS提要等。

但这仍然不是最好的方法。WordPress自动为您提供免费的post格式存档!您甚至可以为其使用特殊的模板文件。所以没有必要建立音频格式的档案,那里已经有一个了

进一步阅读You don\'t know query, by Andrew Nacinecho do_shortcode("$myvalue"); 是浪费,没有必要引用,使用echo do_shortcode( $myvalue ); 相反,它的键入速度更快,对编辑和编写英特尔代码更为友好。我知道codex使用它,但不用担心if(): while() : the_post();, 而是使用支架{} 把他们带到自己的路线上去。每行1条语句/命令。同样,它更容易阅读,对于自动化工具和编辑器来说也更好,我们都需要得到所有的帮助,这样我们才能专注于重要的东西,所有这些角跨元素<span class="top-left-corner"></span> 可以删除并替换为多个CSS背景,border-radius, 或:after:before css选择器

结束

相关推荐

get_query_var not works

我想$\\u在URL中获取一个参数,因此我必须使用query\\u vars。首先,我在函数中添加了以下行。php:function add_query_vars_filter( $vars ){ $vars[] = \"getvar\"; return $vars; } add_filter( \'query_vars\', \'add_query_vars_filter\' ); 之后:if(get_query_var(\'getvar\')) {&#