নেস্টেড লুপগুলিতে পোস্টের ডেটাটিকে পূর্বের লুপে পুনরায় সেট করা


21

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

wp_reset_query() আমি চাই না সিঙ্গল.এফপি-র মূল লুপটিতে ঠিক আবার রিসেট হবে।

আমি get_posts()নতুন WP_Query এর পরিবর্তে ব্যবহার করতে পারি, তবে আমি ব্যবহার করতে সক্ষম হতে চাই get_template_part()

আমি কীভাবে আমার ডেটা প্রকাশনার লুপে পুনরায় সেট করতে পারি, যাতে দ্বিতীয় 'প্রকাশনা শিরোনাম' প্রকাশনা দেয়, ইস্যু, শিরোনাম নয়?

এখানে আমার কোড একক। Php:

$publication = new WP_Query( array(
'connected_type'  => 'publication_to_post',
'connected_items' => $post->ID,
'fields'          => 'ids',
'posts_per_page'  => 1,
) );

if ( $publication->have_posts() ) {
while ( $publication->have_posts() ) : $publication->the_post();
    echo '<h2>Publication title = '.get_the_title().'</h2>';
    $pub_id = get_the_ID();

    $issue = new WP_Query( array(
        'connected_type'  => 'publication_to_issue',
        'connected_items' => $pub_id,
        'fields'          => 'ids',
        'posts_per_page'  => 1,
    ) );

    if ( $issue->have_posts() ) {
        while ( $issue->have_posts() ) : $issue->the_post();

            // need to be able to use template parts in here
            echo '<h2>Issue title = '.get_the_title().'</h2>';

        endwhile;
    }

    // This currently returns the issue title, not the publication title
    echo '<h2>Publication title = '.get_the_title().'</h2>';

endwhile;
}

উত্তর:


20

আমি নিজেই এর উত্তর দিতে যাচ্ছি, তবে এটি আমার পক্ষে এটি সমাধান করার জন্য জনগণের পক্ষে @Cimonwheatley এর খুব চালাক।

ব্যবহার wp_reset_postdata()বা পরিবর্তে wp_reset_query(), আপনি নিম্নলিখিত ব্যবহার করতে পারেন:

$publication->reset_postdata();

যেখানে $ প্রকাশনাই আপনার ক্যোয়ারী অবজেক্ট।

ওয়ার্কিং কোডটি এখন দেখে মনে হচ্ছে:

$publication = new WP_Query( array(
'connected_type'  => 'publication_to_post',
'connected_items' => $post->ID,
'fields'          => 'ids',
'posts_per_page'  => 1,
) );

if ( $publication->have_posts() ) {
while ( $publication->have_posts() ) : $publication->the_post();
    echo '<h2>Publication title = '.get_the_title().'</h2>';
    $pub_id = get_the_ID();

    $issue = new WP_Query( array(
        'connected_type'  => 'publication_to_issue',
        'connected_items' => $pub_id,
        'fields'          => 'ids',
        'posts_per_page'  => 1,
    ) );

    if ( $issue->have_posts() ) {
        while ( $issue->have_posts() ) : $issue->the_post();

            // need to be able to use template parts in here
            echo '<h2>Issue title = '.get_the_title().'</h2>';

        endwhile; $publication->reset_postdata();
    }

    echo '<h2>Publication title = '.get_the_title().'</h2>';

endwhile;
}

1
প্রকৃতপক্ষে, এটি এটি করার জন্য আরও স্মার্ট উপায় way
ডেভিড

এটি কি আপনার পক্ষে সত্যিই কাজ করে?
জিডিওয়াই

5

প্রথমত, আমি মনে করি এটির get_posts()সাথে সমন্বয় ব্যবহার করা সম্ভব setup_postdata()। এগুলির সাহায্যে আপনি সাধারণ ওয়ার্ডপ্রেস লুপের মতো টেমপ্লেট ট্যাগগুলি ব্যবহার করতে পারেন।

তবে আপনি এই ফাংশনটি আপনার নেস্টেড লুপগুলিতেও ব্যবহার করতে পারেন:

# make sure $post is the global in your scope (which should be the case in single.php)
global $post;
if ( $publication->have_posts() ) {
while ( $publication->have_posts() ) : $publication->the_post();
    echo '<h2>Publication title = '.get_the_title().'</h2>';
    $pub_id = get_the_ID();

    # preserve the current post in the higher loop
    $preserve_post = get_post();

    $issue = new WP_Query( array(
        'connected_type'  => 'publication_to_issue',
        'connected_items' => $pub_id,
        'fields'          => 'ids',
        'posts_per_page'  => 1,
    ) );

    if ( $issue->have_posts() ) {
        while ( $issue->have_posts() ) : $issue->the_post();

            // need to be able to use template parts in here
           echo '<h2>Issue title = '.get_the_title().'</h2>';

        endwhile;
    }

    # set the global back to your first loop post
    $post = $preserve_post;
    setup_postdata( $post );
    // This currently returns the issue title, not the publication title
    echo '<h2>Publication title = '.get_the_title().'</h2>';

endwhile;
}
wp_reset_query();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.