একটি কাস্টম শৈলীরশ্রেণীর দ্বারা গোষ্ঠীযুক্ত সমস্ত পোস্ট কাস্টম পোস্ট প্রকারে প্রদর্শন করুন


18

আমি এমন একটি সদস্য পৃষ্ঠায় কাজ করছি যেখানে আমি কাস্টম ট্যাক্সোনমি সহ একটি কাস্টম পোস্ট প্রকারটি ব্যবহার করি। আমার কাস্টম পোস্টের প্রকারটি কল করা হয় memberএবং আমার কাস্টম সংযুক্তি বলা হয়member_groups

আমি সকল সদস্যকে তালিকাবদ্ধ করতে চাই তবে তাদের একত্রে নিজ নিজ গ্রুপে গ্রুপ করব।

সুতরাং স্পষ্ট করে বলতে গেলে, আমি 35 টি সদস্যকে 9 টি গ্রুপে বিভক্ত করেছি - সুতরাং একই প্রশ্নটি নয় বার করার পরিবর্তে আমি একবারে এটি করতে চাই বরং তাদের একসাথে গ্রুপ করব, যাতে সদস্য 1, সদস্য 4 এবং সদস্য 11 এক সাথে এক গ্রুপে বিভক্ত হয়ে যায়, "বিপণন" নামে পরিচিত।

আমি WP_Queryপোস্ট টাইপ সদস্যের অধীনে সমস্ত পোস্ট পুনরুদ্ধার করতে ব্যবহার করছি । আমি বিভিন্ন চেষ্টা করেছি কিন্তু কোনও সফল ফল পাইনি।

আমি কীভাবে এটি অর্জন করতে পারি?

উত্তর:


29

সুতরাং, আপনি একাধিক ক্যোয়ারী স্বয়ংক্রিয়ভাবে বিবেচনা করতে পারেন।

প্রথমে, আপনার কাস্টম শৈলীর শর্তাবলী তালিকা ব্যবহার করে get_terms():

<?php
$member_group_terms = get_terms( 'member_group' );
?>

তারপরে, প্রত্যেকটির মধ্য দিয়ে লুপ করুন, প্রতিবার একটি নতুন ক্যোয়ারী চালাবেন:

<?php
foreach ( $member_group_terms as $member_group_term ) {
    $member_group_query = new WP_Query( array(
        'post_type' => 'member',
        'tax_query' => array(
            array(
                'taxonomy' => 'member_group',
                'field' => 'slug',
                'terms' => array( $member_group_term->slug ),
                'operator' => 'IN'
            )
        )
    ) );
    ?>
    <h2><?php echo $member_group_term->name; ?></h2>
    <ul>
    <?php
    if ( $member_group_query->have_posts() ) : while ( $member_group_query->have_posts() ) : $member_group_query->the_post(); ?>
        <li><?php echo the_title(); ?></li>
    <?php endwhile; endif; ?>
    </ul>
    <?php
    // Reset things, for good measure
    $member_group_query = null;
    wp_reset_postdata();
}
?>

আমি এই পদ্ধতির সাথে বিশেষত কোনও ভুল দেখতে পাচ্ছি না , যদিও এটির স্কেল করার সীমাবদ্ধ ক্ষমতা থাকতে পারে (যেমন আপনার যদি কয়েকশো সদস্য বা হাজারো সদস্য বা সদস্য_গোষ্ঠীর পদ থাকে তবে আপনি পারফরম্যান্সের সমস্যাগুলি দেখতে পাবেন)।


হ্যাঁ এটি পুরোপুরি শব্দ করে। কেবলমাত্র আমার একটি সমস্যা রয়েছে I আমি এই জাতীয় <? পিএইচপি_পোস্ট_পোস্ট_মেটা ($ সদস্য_গোষ্ঠী_মাংস> আইডি, 'চাকরি_শিরোনাম', সত্য);?>> এর মতো কাটম ক্ষেত্রগুলি প্রদর্শন করতে চাই but তবে এটি কার্যকর হয়নি I আমি পোস্ট-পোস্ট- দিয়েও চেষ্টা করেছি I > আইডি তবে কোনও কাজ হয়নি, আপনি কি চ্যাপ বেনেটকে সাহায্য করতে পারবেন?
আনাহিত ডিভি

6

আমি একটি কাস্টম ক্যোয়ারী ব্যবহার করে এবং পরে শব্দটির নাম দিয়ে গ্রুপ করে এটির সমাধান পেয়েছি:

SELECT * 
FROM wp_term_taxonomy AS cat_term_taxonomy
INNER JOIN wp_terms AS cat_terms ON cat_term_taxonomy.term_id = cat_terms.term_id
INNER JOIN wp_term_relationships AS cat_term_relationships ON cat_term_taxonomy.term_taxonomy_id = cat_term_relationships.term_taxonomy_id
INNER JOIN wp_posts AS cat_posts ON cat_term_relationships.object_id = cat_posts.ID
INNER JOIN wp_postmeta AS meta ON cat_posts.ID = meta.post_id
WHERE cat_posts.post_status =  'publish'
AND meta.meta_key =  'active'
AND meta.meta_value =  'active'
AND cat_posts.post_type =  'member'
AND cat_term_taxonomy.taxonomy =  'member_groups'

তারপরে একটি নিয়মিত ফোরচ ক্যোয়ারী ব্যবহার করে আমি কেবল আমার পছন্দসই তথ্যটি বের করতে পারি।

তবে আমি অন্য উপায়টিতে এখনও আগ্রহী, সম্ভবত ওয়ার্ডপ্রেসের নিজস্ব ফাংশন ব্যবহার করে।


আমি সবেমাত্র একটি বিকল্প পদ্ধতি যুক্ত করেছি। আমি কাঁচা এসকিউএল কোয়েরিগুলির প্রয়োজনীয় যে কোনও বিষয় থেকে লজ্জা পাই।
চিপ বেনেট

2
আমি এটিকে সঠিক উত্তর হিসাবে চিহ্নিত করে খুব খুশি হলাম, যদি স্কেমাটি কোনও পর্যায়ে পরিবর্তিত হয় তবে কোয়েরি ওয়ার্ডপ্রেসে কাজ করা বন্ধ করে দেয় ... একক কোয়েরিতে এগুলি সমস্ত সংগ্রহ করার ধারণাটি সঠিক উত্তর। পিএইচপি ওয়ান্ট স্কোনে প্রায় একই সাথে এই ইচ্ছাশক্তিকে টেকনোমিকে গোষ্ঠীভুক্ত করা।
wowo_999

4

এমনকি সহজ:

$terms = get_terms('tax_name');
$posts = array();
foreach ( $terms as $term ) {
    $posts[$term->name] = get_posts(array( 'posts_per_page' => -1, 'post_type' => 'post_type', 'tax_name' => $term->name ));
}

ফলস্বরূপ $ পোস্ট অ্যারের মধ্যে, প্রতিটি কর শব্দটি তার পোস্টগুলি সহ নেস্টেড অ্যারেটির চাবি।


4

আমার এই সঠিক প্রয়োজন ছিল, এবং একটি জিনিস বাদে চিপের সমাধান কাজ করেছিল: 'field' => 'slug'প্রয়োজনীয়।

    foreach ( $service_categories as $category ) {
        $services = new WP_Query( 
            array(
                'post_type'     => 'service',
                'tax_query'     => array(
                    array(
                        'taxonomy'  => 'service_category',
                        'terms'     => array( $category->slug ),
                        'operator'  => 'IN',
                        'get'       => 'all',
                        'field'     => 'slug'
                    )
                )
            ) 
        ); ?>
        <h2><?php echo $category->slug; ?></h2>
        <?php if ( $services->have_posts() ) {  // loop stuff goes here ?>

আমার ফলস্বরূপ প্রদর্শনটি ফ্ল্যাট হওয়ার জন্যও দরকার ছিল 'get' => 'all' এখানে সেট করা আছে।

আশা করি এটি অন্য কাউকে সাহায্য করবে।


3
$query = new WP_Query( 
   array ( 
      'post_type' => 'member', 
      'orderby'   => 'meta_value', 
      'meta_key'  => 'member_group' 
   ) 
);

তারপরে আপনি যখন এই ক্যোয়ারির মধ্য দিয়ে লুপ করবেন তখন এই লাইনগুলি বরাবর একটি ব্যবহার করতে পারেন (পিএইচপি সিউডোকোডে)

$groupName = "";
$counter = 0;
if havePosts: while havePosts: thePost

if( $groupName != post->meta_value )
{
if ($counter > 0)
{
</ul>
}
<h1>A group name</h1>
<ul>
<li>member name</li>
}
else
{
<li>member name</li>
}

endwhile;endif

</ul>

আমি আশা করি এটি সাহায্য করবে. আমি মনে করি আপনি এটি করার চেয়ে এটি আরও জটিল করে তুলছিলেন।

আরও তথ্য: http://codex.wordpress.org/Class_References/WP_Query# টেক্সোনমি_প্যারামিটার


3

আমাকে বহু বছর আগে একটি প্রকল্পে এটি করতে হয়েছিল। আরও কিছু বিশদ সহ ডিজেবি-র অনুরূপ উত্তর। এটি আপনার সমস্ত শ্রেণীবদ্ধের নামকে h3 হিসাবে আউটপুট দেবে, যার প্রতিটি পৃষ্ঠার শিরোনামের বুলেটযুক্ত তালিকা তাদের বিশদ পৃষ্ঠায় লিঙ্ক করবে।

<?php // Output all Taxonomies names with their respective items
$terms = get_terms('member_groups');
foreach( $terms as $term ):
?>                          
    <h3><?php echo $term->name; // Print the term name ?></h3>                          
    <ul>
      <?php                         
          $posts = get_posts(array(
            'post_type' => 'member',
            'taxonomy' => $term->taxonomy,
            'term' => $term->slug,                                  
            'nopaging' => true, // to show all posts in this taxonomy, could also use 'numberposts' => -1 instead
          ));
          foreach($posts as $post): // begin cycle through posts of this taxonmy
            setup_postdata($post); //set up post data for use in the loop (enables the_title(), etc without specifying a post ID)
      ?>        
          <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>    
        <?php endforeach; ?>
    </ul>                                                   
<?php endforeach; ?>

1

ঠিক আছে, এটি একটি পুরানো থ্রেড, তবে কেউ যদি আমার মতো পাশ দিয়ে যায় তবে এটি সাহায্য করতে পারে। ধারণাটি হ'ল মূল ক্যোয়ারীটি সংশোধন করা যাতে আমাদের টেমপ্লেটগুলিতে যেতে এবং নতুন কোয়েরি এবং লুপগুলি তৈরি করার প্রয়োজন হয় না ...

PS: তবুও বড় ডিবিএসে পরীক্ষা করা দরকার। এটা আমার ক্ষেত্রে সন্তোষজনক ছিল।

function grouped_by_taxonomy_main_query( $query ) {

    if ( $query->is_home() && $query->is_main_query() ) { // Run only on the homepage

        $post_ids = array();

        $terms = get_terms('my_custom_taxonomy');

        foreach ( $terms as $term ) {
            $post_ids = array_merge( $post_ids, get_posts( array( 
                'posts_per_page' => 4, // as you wish...
                'post_type' => 'my_custom_post_type', // If needed... Default is posts
                'fields' => 'ids', // we only want the ids to use later in 'post__in'
                'tax_query' => array( array( 'taxonomy' => $term->taxonomy, 'field' => 'term_id', 'terms' => $term->term_id, )))) // getting posts in the current term
            );
        }

        $query->query_vars['post_type'] = 'my_custom_post_type'; // Again, if needed... Default is posts
        $query->query_vars['posts_per_page'] = 16; // If needed...
        $query->query_vars['post__in'] = $post_ids; // Filtering with the post ids we've obtained above
        $query->query_vars['orderby'] = 'post__in'; // Here we keep the order we generated in the terms loop
        $query->query_vars['ignore_sticky_posts'] = 1; // If you dont want your sticky posts to change the order

    }
}

// Hook my above function to the pre_get_posts action
add_action( 'pre_get_posts', 'grouped_by_taxonomy_main_query' );
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.