将自定义帖子类型作为普通帖子进行处理和显示

时间:2017-02-01 作者:Roberto Meijide

我已经为我的Wordpress页面创建了一些自定义帖子,我可以很好地处理它们。我可以创建一个新的,编辑它,并将其显示在“archive-custom\\u post\\u type\\u name.php”和更多内容中。我甚至可以使用与普通帖子相同的类别。

我最大的问题是,我不能在我的网站上将它们显示为普通帖子。我想在普通帖子之间混合显示。

我尝试过:

add_action( \'pre_get_posts\', \'my_get_posts\' );

function my_get_posts( $query ) {    
    if ( is_home() && $query->is_main_query() )
         $query->set( \'post_type\', array( \'post\', \'actualizacion\', \'notificacion\' ) );    
    return $query;
}
但什么都没发生。我还尝试:

add_action( \'pre_get_posts\', \'add_mi_cpt\' );
/**
 * @param WP_Query $query
 * @return WP_Query
 */
function add_mi_cpt( $query ) {    
    if ( $query->is_main_query() )
         $query->set( \'post_type\', array( \'post\', \'LISTA_CPT\' ) );    
    return $query;
}
在我的wp管理员中,我可以在正常帖子之间看到我的自定义帖子,但我的问题是,我的网页会给我一个404错误。

无论如何,创建自定义的帖子类型并像普通帖子一样使用主题,这样我就可以在我的网站中显示所有混合的主题了?

谢谢

---已编辑---

我更改了我的第一个片段,现在自定义帖子类型可以在我的WP Admin“Show all posts”页面中显示,但不在网站中显示:

function add_my_post_types_to_query( $query ) {
    if ( is_admin() && $query->is_main_query() )
        $query->set( \'post_type\', array( \'post\', \'My_Custom_Post_Type_List\' ) );
    return $query;
}
add_action( \'pre_get_posts\', \'add_my_post_types_to_query\' );
---已编辑2.0---

也许下一步是更改页面中的循环。php来显示循环中的自定义帖子类型?我的循环如下所示:

<?php
    if ( have_posts() ) :
        // Start the Loop.
        while ( have_posts() ) : the_post();
        ?>

            <?php get_template_part( \'content\',\'page\' ); ?>

            <?php
            // If comments are open or we have at least one comment, load up the comment template.
            if ( comments_open() || get_comments_number() ) :
            comments_template();
            endif;
            ?>

        <?php
        endwhile;

    endif;
    ?>

1 个回复
SO网友:nibnut

好的,我想你可以申请codex example 原样:

function search_filter($query) {
  if ( !is_admin() && $query->is_main_query() ) {
    if ($query->is_search) {
      $query->set(\'post_type\', array( \'post\', \'actualizacion\', \'notificacion\' ) );
    }
  }
}
add_action(\'pre_get_posts\',\'search_filter\');
我想你只是错过了!is_admin() 在那里签入。。。

希望这有帮助!