ডাব্লুপি_কিউয়ারি কলটিতে wp_reset_query () ব্যবহার করা কি প্রয়োজনীয়?


26

পোস্টগুলি পুনরুদ্ধার করতে আমি নিম্নলিখিত কোডটি ব্যবহার করছি:

<?php
$featuredPosts = new WP_Query();
$featuredPosts->query('showposts=5&cat=3');

while ($featuredPosts->have_posts()) : $featuredPosts->the_post(); ?>

    <h1><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h1>
    <div class="meta">
        By <?php the_author() ?>
    </div>
    <div class="storycontent">
        <?php the_excerpt(); ?>
    </div>

<?php endwhile; ?>

আমার কি ব্যবহার করা দরকার wp_reset_query()? আমি যদি করি তবে আমি এটি কোথায় রাখব?



2
আপনি যদি পৃষ্ঠার অন্য কোথাও প্রধান ক্যোয়ারী অবজেক্টের উপর নির্ভর করছেন তবে হ্যাঁ! আপনার কাস্টম ক্যোয়ারীটির উপরে পুনরাবৃত্তি হওয়ার আগে প্রধান ক্যোয়ারী অবজেক্টটিতে ডেটা হয়েছে তা নিশ্চিত করার জন্য আপনাকে এটি কল করা উচিত। আপনি যখন the_post()পদ্ধতিটি কল করেন (অর্থাত্‍ $my_custom_query->the_post()) আপনি মূল ক্যোয়ারীটি দেখায় এমন পোস্টের ভেরিয়েবলগুলি পুনরায় পূরণ করুন, আপনি যখন কল করবেন তখন পুনরায় সেটটি পূর্ববর্তী ডেটাগুলির সাথে এই ভারগুলি রিফিল করে। কাস্টম প্রশ্নের পরে পুনরায় সেটগুলি ব্যবহার করা ভাল অনুশীলন।
t31os

উত্তর:


10

হাই @ জাজোচেন:

সহজ উত্তর: না।

ওয়ার্ডপ্রেস ভি ৩.০.৪ wp_reset_query()থেকে ফাংশনগুলির জন্য পিএইচপি কোডটি /wp-includes/query.phpনীচে যা ফাংশনগুলি পরে ডাকা হয় তা অনুসরণ করে। আপনি দেখতে পাচ্ছেন যে এটি মূলত বৈশ্বিক ভেরিয়েবলগুলি সংশোধন করার বিষয়ে।

আপনি যখন ব্যবহার করবেন new WP_Query($args)আপনি মানগুলি থেকে স্থানীয় ভেরিয়েবলের কাছে রিটার্ন মান নির্ধারণ করবেন, যদি আপনি এত জটিল কিছু না করেন যে আপনি ইতিমধ্যে না থেকে এই প্রশ্নের উত্তরটি ইতিমধ্যে জানতেন, আপনাকে কল করার দরকার নেই wp_reset_query():

function wp_reset_query() {
  unset($GLOBALS['wp_query']);
  $GLOBALS['wp_query'] =& $GLOBALS['wp_the_query'];
  wp_reset_postdata();
}

function wp_reset_postdata() {
  global $wp_query;
  if ( !empty($wp_query->post) ) {
    $GLOBALS['post'] = $wp_query->post;
    setup_postdata($wp_query->post);
  }
}

function setup_postdata($post) {
  global $id, $authordata, $day, $currentmonth, $page, $pages, $multipage, $more, $numpages;

  $id = (int) $post->ID;

  $authordata = get_userdata($post->post_author);

  $day = mysql2date('d.m.y', $post->post_date, false);
  $currentmonth = mysql2date('m', $post->post_date, false);
  $numpages = 1;
  $page = get_query_var('page');
  if ( !$page )
    $page = 1;
  if ( is_single() || is_page() || is_feed() )
    $more = 1;
  $content = $post->post_content;
  if ( strpos( $content, '<!--nextpage-->' ) ) {
    if ( $page > 1 )
      $more = 1;
    $multipage = 1;
    $content = str_replace("\n<!--nextpage-->\n", '<!--nextpage-->', $content);
    $content = str_replace("\n<!--nextpage-->", '<!--nextpage-->', $content);
    $content = str_replace("<!--nextpage-->\n", '<!--nextpage-->', $content);
    $pages = explode('<!--nextpage-->', $content);
    $numpages = count($pages);
  } else {
    $pages = array( $post->post_content );
    $multipage = 0;
  }

  do_action_ref_array('the_post', array(&$post));

  return true;
}

-Mike


@ জাজোচেন - হি তিনি অবশ্যই আমাকে ইদানীং চাপ দিচ্ছেন, এটা নিশ্চিত! তাদের অনুমান অনুসারে আমার ধারণা, প্রতিযোগিতা জাতকে উন্নত করে (তবে নিশ্চিতভাবেই আমাকে আর কোনও উত্পাদনশীল কাজ করা থেকে
বিরত

1
এটি অন্যদের পড়ার জন্য, যেহেতু এটি এখনও স্বীকৃত উত্তর (@ রাস্টের উত্তরটি গ্রহণ করা উচিত)। যেহেতু ওপি the_post()তার কোডটিতে ব্যবহার করে, সর্বোত্তম অনুশীলনগুলি নির্দেশ করে যে তাকে অবশ্যই ব্যবহার করা উচিত wp_reset_postdata()wp_reset_query()কলগুলি wp_reset_postdata(), যাতে এটি কাজ করবে, যদিও অন্য কাজটি wp_reset_query()করে - $wp_queryবৈশ্বিক চলক পুনরায় সেট করা - প্রয়োজনীয় নয় তবে এই ক্ষেত্রে ক্ষতিকারক নয়। সুতরাং উত্তরটি হ্যাঁ হ্যাঁ
টম অগার

21

এটি WP_Queryনিজেই প্রয়োজন হয় না , তবে আপনার ডেটা দিয়ে বৈশ্বিক ভেরিয়েবলগুলি পূরণ করতে যদি কোনও সম্পর্কিত ফাংশন / পদ্ধতি (যেমন the_post()বা setup_postdata()) ব্যবহার করেন তবে এটি প্রয়োজনীয় (বা করার জন্য কমপক্ষে ভাল জিনিস) ।

মূলত নতুন WP_Queryঅবজেক্ট তৈরি করা কেবলমাত্র তথ্য পুনরুদ্ধার, তবে এটি সক্রিয় লুপ চালাতে ব্যবহার করা এবং টেমপ্লেট ট্যাগগুলিতে ডেটা অ্যাক্সেসযোগ্য করে তোলা পরিবেশকে পরিবর্তন করে এবং এরপরে সবকিছু পুনরায় সেট করা ভাল।

সামগ্রিকভাবে - এটি কল করা অর্থবহ পারফরম্যান্সের জরিমানা নয়, সুতরাং আপনার কী করা উচিত বা ভুলে যাওয়া এবং রহস্যজনকভাবে কিছু ভেঙে যাওয়ার সিদ্ধান্ত নেওয়া তার চেয়ে সর্বদা এটি কল করা সহজ।

হালনাগাদ

wp_reset_postdata()ফাংশনটি আরও মানানসই পছন্দ বলে মনে হচ্ছে। wp_reset_query()গ্লোবাল $wp_query(যা কাস্টম WP_Queryঅবজেক্ট প্রভাবিত করে না) এবং $post (যা এটি উপরের মতো হতে পারে) পুনরায় সেট করে । wp_reset_postdata()শুধুমাত্র পুনরুদ্ধার $post, যা যথেষ্ট হওয়া উচিত।


2

না you যাইহোক, আপনি যদি global $wp_queryভেরিয়েবলটি নিয়ে ছাপ ফেলেন , ভাল, তবে আপনার বৈশ্বিক নেমস্পেস যে কারও স্ক্রিপ্টকে প্রভাবিত করে যারা একই সাথে চলকটি ব্যবহার করে। এবং যদি আপনি এতে ডেটা পরিবর্তন করতে কিছু করেন তবে আপনাকে এটি ব্যবহারের পরে এটি পুনরায় সেট করতে হবে।


0

আপনি যদি এইভাবে কাস্টম ক্যোয়ারী ব্যবহার করেন

$cat = new WP_query(); 
$cat->query("cat=19,20,-23&showposts=5&orderby=rand"); 
while ($cat->have_posts()) : $cat->the_post(); 
  $data = get_post_meta( $post->ID, 'key', true );
$img_arrays []= $data['productimage']; 
$lnk_arrays[] =get_permalink($post_ID); 
endwhile; 
wp_reset_query(); 

তাহলে আপনি সমস্যায় পড়বেন না। অন্যথায়, যদি একই পৃষ্ঠায় অন্য লুপ থাকে তবে আপনি কিছু অপ্রত্যাশিত ফলাফল পেতে বাধ্য। আমি উপরের কোডে wp_reset_query () ব্যবহার করিনি (যা আমার শিরোনাম.এফপি ফাইলটিতে স্থাপন করা হয়েছিল। তারপরে যখন আমি সিঙ্গল.এফপিতে প্রবেশ করি তখন বেশিরভাগ ক্ষেত্রে আমি অন্যান্য বিভাগগুলির বিশদ পৃষ্ঠা পাই যা হতাশাবোধ করে Later পরে, আমি বুঝতে পারি যে আমি শীর্ষে ক্যোয়ারীটি পুনরায় সেট করতে ভুলে গিয়েছি Soon

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