簡體   English   中英

在 Wordpress 循環中包含自定義帖子類型

[英]Include custom post type in Wordpress loop

抱歉,我想我閱讀了關於此的所有帖子,但無法讓它發揮作用。

我有一個名為“外部”的 Wordpress 自定義帖子類型,我想在我的主頁上同時顯示來自“外部”的帖子以及我的正常標准帖子。

這是我的循環:

<?php 
get_header(); 

if ( get_query_var('paged') ) { $paged = get_query_var('paged'); }
elseif ( get_query_var('page') ) { $paged = get_query_var('page'); }
else { $paged = 1; }?>


<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<div id="post-<?php the_ID(); ?>" <?php post_class(''); ?>>
    <?php the_content(); ?>
</div>
<?php endwhile; wp_reset_postdata(); endif; ?>    

如何在此代碼中包含“外部”帖子?

然后主題使用塊在起始頁上顯示內容,這里是帶有 post 查詢的 block8.php。

function block_eight_ajax_query($atts='') {
    $args = array (
$is_ajax = 0;
if($atts==''){
    $is_ajax=1;
    $atts=$_GET;
    if($atts['global_query']){
        unset($atts['no_found_rows']);
        unset($atts['suppress_filters']);
        unset($atts['cache_results']);
        unset($atts['update_post_term_cache']);
        unset($atts['update_post_meta_cache']);
        unset($atts['nopaging']);
    }
}
$atts['is_ajax'] = $is_ajax;
$query = null;
$query = new WP_Query( $atts );
$html = '';
if ( $query->have_posts() ) {
    ob_start();
    $i = 1;
    while ( $query->have_posts() ):
        $query->the_post();

        $atts['video'] = rd_field( 'abomb_post_video' );
        $atts['extern'] = rd_field( 'extern' );
        $atts['audio'] = rd_field( 'abomb_post_audio' );
        $atts['gallery'] = rd_field( 'abomb_post_gallery' );
        $atts['counter'] = $i;
        block_grid_content($atts);
        if ($atts['column'] == 'grid-12') { $divide = 1; }
        else if ($atts['column'] == 'grid-3') { $divide = 4; }
        else if ($atts['column'] == 'grid-4') { $divide = 3; }
        else { $divide = 2; }
        if ($i%$divide==0 && $divide!=1) {
            echo '<div class="clear"></div>';
        }
        $i++;
    endwhile;
    if ($atts['nav'] == 'numbered') {
        echo '<div class="grid-12">';
            rd_pagination($query->max_num_pages);
        echo '</div>';
    }
    wp_reset_postdata();
    $html = ob_get_clean();
    if($is_ajax==1){
        echo $html;
        exit();
    }
    return $html;
}
else{
    if($is_ajax==1){
        echo '-11';
        exit();
    }
    return '';
}
}

更新:我將此代碼添加到函數中:

add_action( 'pre_get_posts', 'add_my_post_types_to_query' );


function add_my_post_types_to_query( $query ) {
if ( $query->is_home() && $query->is_main_query() )
    $query->set( 'post_type', array( 'post', 'extern' ) );
return $query;
}

現在我可以看到搜索結果中的帖子,但我還需要 Block8.php 中的查詢來獲取它們。

我謝謝!

要在常規循環(即帖子頁面)中包含自定義帖子類型,只需在if ( have_posts() ) :之前將以下代碼添加到 index.php if ( have_posts() ) :

$args = array(
'post_type'   => array('post', 'custom_post_type'),
'post_status' => 'publish',
);
$new_post_loop = new WP_Query( $args );

然后修改以下兩行:

if ( have_posts() ) :將其更改為if ( $new_post_loop -> have_posts() ) :

while ( have_posts() ) : the_post(); to while ( $new_post_loop -> have_posts() ) : $new_post_loop -> the_post();

此解決方案避免了在后端的所有帖子屏幕中列出自定義帖子類型的問題, @David.J的回答會產生這種問題;)

將此添加到您的functions.php 文件中。

/**
* @param WP_Query $query
* @return WP_Query
*/

function add_my_custom_post_type( $query ) {
    if ($query->is_main_query()) 
        $query->set( 'post_type', array( 'post', 'external' ) );
    return $query;
}
add_action( 'pre_get_posts', 'add_my_custom_post_type' );

參考和重復: https : //wordpress.stackexchange.com/questions/27104/how-to-display-regular-posts-custom-post-types-that-fall-under-a-category-usin

function add_my_custom_post_type( $query ) {
    if ( ! is_admin() && $query->is_main_query() ) {
        if ($query->is_main_query()) {
            $query->set( 'post_type', array( 'post', 'some_custom_post_type_name' ) );
        }
    return $query;
    }
}
add_action( 'pre_get_posts', 'add_my_custom_post_type' );

這是編寫代碼的正確方法,以免破壞儀表板查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM