WP_QUERY和IS_PAGE_TEMPLATE()条件

时间:2014-04-01 作者:user2688562

我有一个自定义查询,如下所示:

        $temp = $wp_query;
        $wp_query = null;
        $args = array(\'posts_per_page\' => 5, \'post_type\' => \'gallery\', \'post_status\' => \'published\', \'paged\' => $paged);
        $wp_query = new WP_Query($args);
        if($wp_query->have_posts()):
            while($wp_query->have_posts()) : $wp_query->the_post();
                if(get_post_format()) {
                    $post_format = get_post_format();
                } else {
                    $post_format = \'standard\';
                }
                get_template_part(\'/templates/parts/format\', $post_format);
            endwhile;
        endif; ?>
我调用的内部post格式get_template_part(\'/templates/parts/format\', $post_format); 我有条件is_page_template().

此条件无效。但当我使用常规WP_Query 如果不重置默认值,它就可以工作。我能做些什么来实现这一目标?

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

来自《法典》(emphasis mine):

此条件标记允许您确定是否在任何页面模板中。(可选)检查页面中是否正在使用特定的页面模板。这是一个布尔函数,意味着它返回TRUE或FALSE。This tag must be used BEFORE The Loop and does not work inside The Loop (见下文注释)。

http://codex.wordpress.org/Function_Reference/is_page_template

你的get_template_part(), 它加载的所有代码都在循环中,因此,即使这对您有效,有时也会出错。我建议在法典中提供解决方案:

功能get_page_template_slug( $post_id ) 将返回当前分配的页面模板的slug(如果未分配模板,则返回空字符串;如果$post_id 与实际页面不对应)。您可以在任何地方(在循环中或外部)轻松使用此选项来确定是否已为任何页面分配了页面模板。

  // in the loop:
  if ( get_page_template_slug( get_the_ID() ) ){
     // Yep, this page has a page template
  }
也就是说,在内部修改代码get_template_part(\'/templates/parts/format\', $post_format); 使用get_page_template_slug( get_the_ID() ).

SO网友:Pieter Goosen

你这里有几个错误。

首先,如果您需要检查是否有特定的帖子格式,请使用has_post_format( $post_format ). 因此,如果您需要为post-type视频指定一些特定内容,您将执行以下操作

if ( has_post_format(\'video\')) {
<--show video maybe-->
}
其次,standard 实际上不是post格式。未设置特定格式时,wordpress将指定Standard 去那个岗位。这是您将在post editor的后端看到的内容。如果您需要排除所有其他帖子类型,只显示没有指定帖子格式的特定内容,您将使用false == has_post_format() 例如

 if ( false == has_post_format()) {
    <--show post without a post format-->
    }
第三,你的is_page_template() 我很困惑,因为我不知道你在哪里使用它。

把这个留给你,你为什么不创建content-postformat.php 模板并正常调用它们。get_template_part( \'content\', get_post_format() ) 获取所有格式或get_template_part( \'content\', \'video\' ) 在这种情况下,调用特定格式video 总体安排

这就是twentyfourteen\'scontent.php 看起来像。所有没有帖子格式的帖子都将使用此模板显示。

<?php
/**
 * The default template for displaying content
 *
 * Used for both single and index/archive/search.
 *
 * @package WordPress
 * @subpackage Twenty_Fourteen
 * @since Twenty Fourteen 1.0
 */
?>

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
    <?php twentyfourteen_post_thumbnail(); ?>

    <header class="entry-header">
        <?php if ( in_array( \'category\', get_object_taxonomies( get_post_type() ) ) && twentyfourteen_categorized_blog() ) : ?>
        <div class="entry-meta">
            <span class="cat-links"><?php echo get_the_category_list( _x( \', \', \'Used between list items, there is a space after the comma.\', \'twentyfourteen\' ) ); ?></span>
        </div>
        <?php
            endif;

            if ( is_single() ) :
                the_title( \'<h1 class="entry-title">\', \'</h1>\' );
            else :
                the_title( \'<h1 class="entry-title"><a href="\' . esc_url( get_permalink() ) . \'" rel="bookmark">\', \'</a></h1>\' );
            endif;
        ?>

        <div class="entry-meta">
            <?php
                if ( \'post\' == get_post_type() )
                    twentyfourteen_posted_on();

                if ( ! post_password_required() && ( comments_open() || get_comments_number() ) ) :
            ?>
            <span class="comments-link"><?php comments_popup_link( __( \'Leave a comment\', \'twentyfourteen\' ), __( \'1 Comment\', \'twentyfourteen\' ), __( \'% Comments\', \'twentyfourteen\' ) ); ?></span>
            <?php
                endif;

                edit_post_link( __( \'Edit\', \'twentyfourteen\' ), \'<span class="edit-link">\', \'</span>\' );
            ?>
        </div><!-- .entry-meta -->
    </header><!-- .entry-header -->

    <?php if ( is_search() ) : ?>
    <div class="entry-summary">
        <?php the_excerpt(); ?>
    </div><!-- .entry-summary -->
    <?php else : ?>
    <div class="entry-content">
        <?php
            the_content( __( \'Continue reading <span class="meta-nav">&rarr;</span>\', \'twentyfourteen\' ) );
            wp_link_pages( array(
                \'before\'      => \'<div class="page-links"><span class="page-links-title">\' . __( \'Pages:\', \'twentyfourteen\' ) . \'</span>\',
                \'after\'       => \'</div>\',
                \'link_before\' => \'<span>\',
                \'link_after\'  => \'</span>\',
            ) );
        ?>
    </div><!-- .entry-content -->
    <?php endif; ?>

    <?php the_tags( \'<footer class="entry-meta"><span class="tag-links">\', \'\', \'</span></footer>\' ); ?>
</article><!-- #post-## -->
也就是说,将所有内容放在一起,您的代码将如下所示

$temp = $wp_query;
    $wp_query = null;
    $args = array(\'posts_per_page\' => 5, \'post_type\' => \'gallery\', \'post_status\' => \'published\', \'paged\' => $paged);
    $wp_query = new WP_Query($args);
    if($wp_query->have_posts()):
        while($wp_query->have_posts()) : $wp_query->the_post();
            if ( false == has_post_format()) {
                <--do something for posts without post format-->
            } else {
                <--do something for posts with post format-->
            }
        endwhile;
    endif; ?>
请看s-ha-dum的答案

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post