新的WP_QUERY没有隔离首页模板上的自定义帖子类型

时间:2014-12-13 作者:Marj Wyatt

这是我头版的代码。php模板

<?php
add_filter( \'genesis_markup_site-inner_output\', \'__return_false\' );
add_filter( \'genesis_markup_content_output\', \'__return_false\' );
add_filter( \'genesis_pre_get_option_site_layout\', \'__genesis_return_full_width_content\' );

//* Remove page titles site wide (posts & pages) (requires HTML5 theme support)
remove_action( \'genesis_entry_header\', \'genesis_do_post_title\' );

//* Remove the entry header markup (requires HTML5 theme support)
remove_action( \'genesis_entry_header\', \'genesis_entry_header_markup_open\', 5 );
remove_action( \'genesis_entry_header\', \'genesis_entry_header_markup_close\', 15 );

// Execute custom home page. If no widgets active, then loop
remove_action( \'genesis_before_header\', \'vm_utility_bar\' );
add_action( \'genesis_meta\', \'vm_custom_home_loop\' );

function vm_custom_home_loop() {
    global $post;
    remove_action( \'genesis_loop\', \'genesis_do_loop\' );
    add_action( \'genesis_before_content\', \'vm_home\' );
}

// Home Top Gallery section

function vm_home() {
    echo \'<main class="content">\';
        vm_home_do_top();
        vm_home_do_bottom();
    echo \'</main>\';
}


function vm_home_do_top() {
    echo \'<section id="home-top"><div class="home-top clearfix">\';
    echo \'<div class="home-top-left two-thirds first">\';
    if ( function_exists( \'soliloquy\' ) ) {
      soliloquy( \'rotating-videos\', \'slug\' );
     } else { if (is_active_sidebar( \'home-video\' )) {
            genesis_widget_area( \'home-video\', array(
                \'before\' => \'<aside class="home-video video-container">\',
                \'after\' => \'</aside>\',
            ) );
        }
        }
    echo \'</div><!--end home-top-left-->\';
    echo \'<div class = "home-top-right one-third">\';
    if ( is_active_sidebar( \'home-right\' ) ) {
        genesis_widget_area( \'home-right\', array(
            \'before\' => \'<aside class="home-right">\',
            \'after\' => \'</aside>\',
        ) );
    }
    echo \'</div><!--end home-top-right-->\';
    echo \'</div><!--end home-top --></section><!-- end home-top -->\';
}

// Home posts section

function vm_home_do_bottom() {
    echo \'<section id="home-bottom"><div class="home-bottom clearfix">\';
        echo \'<aside class="home-bottom-left widget-area one-third first">\';
        echo \'<h4>Recent Posts: </h4>\';
        echo \'<ul class="home-posts-list">\';
        wp_get_archives( \'type=postbypost&limit=100\' );
        echo \'</ul>\';
        echo \'</aside>\';
            echo \'<aside class="home-bottom-right widget-area two-thirds last">\';
                wp_reset_query();
                $args = ( array( \'post_type\' => \'shows\', \'paged\' => $paged ) );
                $vmQuery1 = new WP_Query( $args );
                while ( $vmQuery1->have_posts() ) : $vmQuery1->the_post();
                    $postID = get_the_ID();
                    $postDate = get_the_date(\'\', $postID);
                    $postType = get_post_type( $postID );
                    echo \'<p>The $postID is \' . $postID . \' The $postDate is \' . $postDate . \' The $postType is \' . $postType . \'</p>\';
                        the_title();
                        echo \'<div class="entry-content">\';
                        the_content();
                        echo \'</div>\';
                endwhile;
                wp_reset_postdata();
            echo \'</aside>\';
            //) );
    echo \'</div></section><!-- end home-bottom -->\';
}

genesis();
post类型、日期和ID的回显严格用于故障排除。

对自定义职位类型的查询将返回所有职位类型,包括显示的职位类型。当我将相同的查询放入自己的模板中时,它工作正常,只返回显示。

我肯定错过了一些明显的东西,我希望这里的人能向我解释如何仅在头版的活动查询中隔离自定义帖子类型。这必须是可能的。

提前感谢您的有益贡献。

附录:我刚刚注意到,在我返回网站上所有帖子类型(不应该)的查询中,它将自定义帖子类型标识为“post”,而不是“shows”,即使它的帖子ID和发布日期是正确的。它不会返回节目的标题或任何内容。

然而,存档上的相同查询显示。php returns只显示了这一点,显然是在非首页的模板上。php,代码知道要查找什么以及如何使用我的查询处理它。

附录2:我已经开始工作了。上面的代码正在检索除头版上的自定义帖子类型之外的所有内容。php。正如我所指出的,对归档故事的相同查询。php工作正常。

这些是我对头版所做的代码更改。php模板。

在页面顶部,我添加了以下功能:

add_action( \'pre_get_posts\', \'vm_get_shows\' );
function vm_get_shows ( $query ) {
    $query->set(\'post_type\', array( \'post\', \'page\', \'nav_menu_item\', \'shows\' ) );
}
对查询部分进行了如下修改:

echo \'<aside class="home-bottom-right widget-area two-thirds last">\';
   wp_reset_query();
   $args = array( \'post_type\' => \'shows\' );
   $vmQuery1 = new WP_Query( $args );
   if ( $vmQuery1->have_posts() ) : while ( $vmQuery1->have_posts() ) : $vmQuery1->the_post();
      $postID = get_the_ID();
      $postDate = get_the_date(\'\', $postID);
      $postType = get_post_type( $postID );
      $postTitle = get_the_title($postID);
      if ( $postType == \'shows\' ) {
        echo \'<p>The $postID is \' . $postID . \' The $postDate is \' . $postDate . \' The $postType is \' . $postType . \'</p>\';
        the_title();
        echo \'<div class="entry-content">\';
          the_content();
        echo \'</div>\';
      }
      endwhile;
      endif;
      wp_reset_postdata();
echo \'</aside>\';
所以现在我的问题是:为什么我必须进行冗余检查以确保postType在查询中显示第二条if语句?post\\u type=>\'shows\'的参数不应该在头版处理这个问题吗。php模板?

1 个回复
SO网友:Brad Dalton

可以将条件标记与pre_get_posts 函数文件中这样的操作挂钩。

add_action( \'pre_get_posts\', \'vm_get_shows\' );
function vm_get_shows ( $query ) {
if ( !is_admin() && $query->is_main_query() && is_home() ) {
    $query->set(\'post_type\', \'shows\' );
    }
}

结束

相关推荐

按自定义域(wp-Query和循环)排序和显示帖子)

我只想在主页上显示即将到来的活动帖子。我使用“custom field suite”插件创建了一个自定义字段,名为“ENDS”,表示事件结束的日期。正如你所知,我只想在家里举行即将到来的活动,最接近现在的日期排在第一位。过期后,我希望将其归档到“归档”中,该页面在另一个页面上可见(该页面还应以最近过期的事件开始排序归档的事件帖子)。模板使用无限滚动加载帖子,这是我的索引文件,带有默认循环:http://pastebin.com/x3NzZBZX我需要集成这样的东西,但没有成功:<?php $