Show Two custom Post type and their posts on category page

I have Two Custom Post Types "Article " & "News" and they both use same categorieslike [ audit

I have Two Custom Post Types "Article " & "News" and they both use same categories like [ audit , income , tax] . I want when i open audit category page then the post showsn like below:

the code i already tried on archieve.php but isnt working:

<?php

    $cats = get_the_category();
    $args = array(
        'post_type' => 'articles',
        'post__not_in' => array( get_the_ID() ),
        'posts_per_page' => 5,
        'cat'     => $cats[0]->term_id,
        'meta_query' => array(
                    array(
                    'key' => 'recommended_article',
                    'value' => '1',
                    'compare' => '=='
                        )
                    )
    );
    $query = new WP_Query( $args );

?>  

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

<!--HTML-->

<?php endwhile; endif; wp_reset_postdata(); ?>

I have Two Custom Post Types "Article " & "News" and they both use same categories like [ audit , income , tax] . I want when i open audit category page then the post showsn like below:

the code i already tried on archieve.php but isnt working:

<?php

    $cats = get_the_category();
    $args = array(
        'post_type' => 'articles',
        'post__not_in' => array( get_the_ID() ),
        'posts_per_page' => 5,
        'cat'     => $cats[0]->term_id,
        'meta_query' => array(
                    array(
                    'key' => 'recommended_article',
                    'value' => '1',
                    'compare' => '=='
                        )
                    )
    );
    $query = new WP_Query( $args );

?>  

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

<!--HTML-->

<?php endwhile; endif; wp_reset_postdata(); ?>
Share Improve this question asked Dec 12, 2019 at 10:59 Hakimuddin SaifeeHakimuddin Saifee 392 silver badges10 bronze badges
Add a comment  | 

4 Answers 4

Reset to default 1

First, I would recommend making this change in Category.php file, as archive.php is affecting tags as well as other archives according to Wordpress Theme Hierarchy file system.

Try adding the two queries like next:

$cats = get_the_category();
    $cat_id = $cats[0]->term_id;


        // news
        $args = array(
    'post_type' => 'news',
    'posts_per_page' => 5,
    'cat'     => $cat_id,
);
$query = new WP_Query($args);

if($query->have_posts() ) : 
    while( $query->have_posts() ) :
        $query->the_post();
    endwhile; 
endif; 

wp_reset_postdata(); 

    // articles
$args = array(
    'post_type' => 'articles',
    'posts_per_page' => 5,
    'cat'     => $cat_id,
);
$query = new WP_Query($args);

if($query->have_posts() ) : 
    while( $query->have_posts() ) :
        $query->the_post();
    endwhile; 
endif; 

wp_reset_postdata(); 

Create taxonomy-categories.php or In your archive.php add below code to get post of article and news post type for current category. I assume that your taxonomy for both post type is categories. change categories with your taxonomy and post_type with your post types for news and article from below code.

 # Article 
 $articleargs = array(
        'post_type' => 'article',
        'posts_per_page' => 5,
        'tax_query' => array(
            'relation' => 'AND',
            array(
                'taxonomy' => 'categories',
                'field'    => 'name',
                'terms'    => get_queried_object()
            )
        ),
    );
    $articlequery = new WP_Query( $articleargs );

     if( $articlequery->have_posts() ) : 
        echo "<h2>Articles</h2>";
        echo "<ul>";
        while( $articlequery->have_posts() ) : $articlequery->the_post();   
            echo "<li>".get_the_title()."</li>";
         endwhile; 
         echo "</ul>";
    endif; 
    wp_reset_postdata(); 

    # news
    $newsargs = array(
        'post_type' => 'news',
        'posts_per_page' => 5,
        'tax_query' => array(
            'relation' => 'AND',
            array(
                'taxonomy' => 'categories',
                'field'    => 'name',
                'terms'    => get_queried_object()
            )
        ),
    );
    $newsquery = new WP_Query( $newsargs );

     if( $newsquery->have_posts() ) : 
        echo "<h2>News</h2>";
        echo "<ul>";
        while( $newsquery->have_posts() ) : $newsquery->the_post();   
            echo "<li>".get_the_title()."</li>";
         endwhile; 
         echo "</ul>";
    endif; 
    wp_reset_postdata(); 

The get_the_category() function retrieves the categories assigned to the first post from the loop, and that's not what you mean. I assume that audit, income, tax, etc. are built-in categories, not custom taxonomy (in this case you need to replace cat parameter of WP_Query to tax_query).

Create category.php file if it doesn't exist by copying archive.php. This way the template will be used only on the category page.

ID of the currently viewed category you can get with get_queried_object_id(). You don't have to check type of the queried object in the category.php file, it will always be correct. Having a category ID, you insert them into the query parameters and you only receive posts belonging to it.

If you intend to apply the template only to selected categories (audit, income, tax) instead of all use the {$type}_template filter.

//
// ge ID of the  current category
$cat_id = get_queried_object_id();

//
// get 'news' posts from current category 
$args = array(
    'post_type' => 'news',
    'posts_per_page' => 10,
    'cat'       => (int)$cat_id,  // <==
    //'meta_query' => array(
    //    array(
    //        'key' => 'recommended_article',
    //        'value' => '1',
    //        'compare' => '=',    // <== 
    //    )
    )
);
$query = new WP_Query( $args );
//
// display posts
// 
wp_reset_postdata();


//
// get 'articles' posts from current category 
$args = array(
    'post_type' => 'articles',   // <==
    'posts_per_page' => 10,
    'cat'       => (int)$cat_id,
    //'meta_query' => array(
    //    array(
    //        'key' => 'recommended_article',
    //        'value' => '1',
    //        'compare' => '=',
    //    )
    )
);
$query = new WP_Query( $args );
//
// ...
// 
wp_reset_postdata();

Its Done Thank U so much Everyone Who Answered!

<?php
/*
 * dglib_breadcrumbs_section_template - hook
 *
 * @hooked - dglib_breadcrumbs_section_callback - 10
 *
 * @since 1.0.6
 */

do_action( 'dglib_breadcrumbs_section_template' );
?>
    <div id="primary" class="content-area">
        <main id="main" class="site-main" role="main">


<header class="page-header">
                <?php
                    the_archive_title( '<h1 class="page-title">', '</h1>' );
                    the_archive_description( '<div class="archive-description">', '</div>' );

                ?>
            </header>
<div class="row">
                <?php

$category = get_queried_object();

        // news
        $args = array(
    'post_type' => 'news',
    'posts_per_page' => 5,
    'cat'     =>  $category->term_id,
);

$the_query = new WP_Query( $args ); 
?>
<?php if ( $the_query->have_posts() ) : ?>
            <!-- .page-header -->

<div class="col-md-6 col-sm-6">
            <div class="panel panel-default"> 
            <div class="panel-heading">
        <h3 class="sub_header">News</h3>
        </div>
        <ul style="padding-left: 25px; padding-top:15px;list-style: disc; line-height:23px">
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<?php the_title( '<li class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></li>' ); ?>

<?php wp_reset_postdata(); ?>
<?php endwhile;  ?>
</ul>
</div>
</div>

<?php else: ?>
<p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif;  ?>
<?php



        // articles
        $args1 = array(
    'post_type' => 'articles',
    'posts_per_page' => 5,
    'cat'     =>  $category->term_id,
);

$the_query1 = new WP_Query( $args1 ); 
?>
<?php if ( $the_query1->have_posts() ) : ?>
            <!-- .page-header -->

<div class="col-md-6 col-sm-6">
            <div class="panel panel-default"> 
            <div class="panel-heading">
    <h3 class="sub_header">Articles</h3>
        </div>
        <ul style="padding-left: 25px; padding-top:15px;list-style: disc; line-height:23px">
<?php while ( $the_query1->have_posts() ) : $the_query1->the_post(); ?>
<?php the_title( '<li class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></li>' ); ?>

<?php wp_reset_postdata(); ?>
<?php endwhile;  ?>
</ul>
</div>
</div>

<?php else: ?>
<p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif;  ?>
</div>
        </main><!-- #main -->
    </div><!-- #primary -->
<?php
get_sidebar();
get_footer();

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744913426a4600687.html

相关推荐

  • Show Two custom Post type and their posts on category page

    I have Two Custom Post Types "Article " & "News" and they both use same categorieslike [ audit

    1天前
    70

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信