আমি কি 2 টি নতুন WP_Query ($ ভেরিয়েবল) এর মার্জ করতে পারি?


15

আমি একটি মাল্টিসাইট নেটওয়ার্ক চালাচ্ছি এবং আমার কাছে একটি স্কিল কোয়েরি সেটআপ আছে যা swith_to_blog () ব্যবহার করে; এবং পোস্টগুলি জিজ্ঞাসা করে।

এমন কোনও উপায় আছে যে আমি কোয়ালিটি একটি নতুন WP_Query এর ভিতরে ঘোষণা করতে পারি এবং সেই ক্যোয়ারিকে অন্যের সাথে একীভূত করতে পারি?

মূলত যদি আমি এটি করি:

$number1 = new WP_Query($multisitequery);

আমি কি এর সাথে একীভূত করতে পারি:

$number2 = new WP_Query($normalquery);

$normalquery একটি পোর্টফোলিও শর্টকোডে প্রতি পৃষ্ঠাগুলি, সংক্ষেপে, শিরোনাম ইত্যাদির মতো সেটিংস ধারণ করে।

আমি এটি আমার নতুন $multisiteক্যোয়ারী থেকে অনুসন্ধান পোস্ট অন্তর্ভুক্ত করতে চাই ।

এটি কি অর্জন করা যায়? সম্পূর্ণ নতুন শর্টকোড সেটআপ লল তৈরি করা থেকে আমাকে বাঁচাতে চাই

অগ্রিম ধন্যবাদ. ররি

সম্পাদনা ========

আমার যা আছে তা হ'ল:

$portfolio = array();
$portfolio = $settings;

আমার পোর্টফোলিওর ক্রিয়াকলাপটি আরও নীচে "আমার সমস্ত have সেটিংস ['অপশন']] পরে":

$portfolio_query = new WP_Query( $portfolio );

$portfolio_queryএকটি পৃষ্ঠা টেমপ্লেট উপর একটি লুপ ব্যবহার করে।

আমি এর মতো এটিতে একটি অতিরিক্ত ক্যোয়ারী যুক্ত করতে চাই:

global $wpdb, $blog_id, $post;

$blogs = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM wp_blogs ORDER BY blog_id" ) );

$globalcontainer = array();

foreach ($blogs as $blog){

   switch_to_blog($blog->blog_id);

   $globalquery = query_posts($args);

   $globalcontainer = array_merge( $globalcontainer, $globalquery );

   restore_current_blog();
}

যেখানে আমি অনুমান করি যে $globalcontainerএটিতে মার্জ হওয়ার জন্য অ্যারে হবে wp_query();

তাত্ত্বিকভাবে আমি কী সাড়া দিয়েছি তা নিয়ে যাচ্ছি

$mergedqueryargs = array_merge($portfolio , $globalcontainer);
$portfolio_query = new WP_query($mergedqueryargs);

এটা কি সঠিক হবে?

দ্বিতীয়ত, অ্যারে_আরমে অ্যারে কী ওভাররাইট সম্পর্কিত ..... আমি কীভাবে ওভাররাইট থামাতে যাব?

উত্তর:


28

আপনি কেবল যুক্তিগুলি মার্জ করে খুব ভাল কিছু করতে পারবেন না, আপনাকে ফলস্বরূপ পোস্টগুলি অ্যারে এবং পোস্ট_কাউন্টের গণনাটি মার্জ করতে হবে। এটি আমার পক্ষে কাজ করে:

//setup your queries as you already do
$query1 = new WP_Query($args_for_query1);
$query2 = new WP_Query($args_for_query2);

//create new empty query and populate it with the other two
$wp_query = new WP_Query();
$wp_query->posts = array_merge( $query1->posts, $query2->posts );

//populate post_count count for the loop to work correctly
$wp_query->post_count = $query1->post_count + $query2->post_count;

এটি দেখতে দুর্দান্ত দেখাচ্ছে তবে আমি এমন একটি সমাধান খুঁজছি যা প্রাক_জেট_পোস্ট হুকের সাহায্যে ব্যবহার করা যেতে পারে - যেমন, আমার একটি বিদ্যমান WP_Query অবজেক্টটি সংশোধন করা দরকার। আমি '$ wp_query-> init ()' ব্যবহার করে চেষ্টা করেছি; '$ wp_query = new WP_Query ();' এর পরিবর্তে, তবে এটি জিনিসগুলিকে বিশৃঙ্খলা দেখায়। কোন পরামর্শ?
নিষিদ্ধ-জিওইনজিনিং

1
আপনার আলাদা প্রশ্ন যুক্ত করা উচিত কারণ এটি ভিন্ন উত্তর, তবে আপনি এই একই কোডটি কেবলমাত্র ক্যোরি 2 অংশগুলি ব্যবহার করতে পারেন - -> পোস্টগুলি এবং -> পোস্ট_কাউন্টের অংশগুলিকে query wp_query অবজেক্টের মূল ক্যোয়ারির যোগফল যোগ করতে পারেন যা প্রাক_জেট_পোস্টগুলি রয়েছে আপনাকে এবং দ্বিতীয় সংযোজন দেয় যা আপনি যুক্ত করতে চান
গাইড

1
আমি কীভাবে এই মার্জ করা অ্যারে থেকে নকলগুলি সরিয়ে ফেলতে পারি?
রোশন

এর জন্য ধন্যবাদ. একটি ওআর সম্পর্ক ব্যবহার করে একটি সমস্যাযুক্ত মেটা_কিউরি ছিল। এই কৌশলটি ব্যবহার করে এটি বিভক্ত করুন এবং 41 এর থেকে 0.01 এ চলে এসেছেন।
ক্রেগ হর্ষবার্গার

@ নিষেধাজ্ঞাসমূহ আপনি কি কখনও এটি আবিষ্কার করেছেন? আমি এই সঙ্গে আটকে আছি।
হার্ভে

17

আমি সাধারণত তাদের আইডি অ্যারেগুলিকে মার্জ করে তৃতীয় কোয়েরি করি। প্রশ্নের প্রথম সেট সস্তা রাখতে আমি কেবল তাদের আইডি এর ক্ষেত্রের প্যারামিটার ব্যবহার করেই এটি ফিরিয়ে দিই:

//setup your queries with extra parameter fields => ids
$query1 = new WP_Query(array('fields' => 'ids','other_parameters' => 'etc'));
$query2 = new WP_Query(array('fields' => 'ids','other_parameters'=>'etc'));

//now you got post IDs in $query->posts
$allTheIDs = array_merge($query1->posts,$query2->posts);

//new query, using post__in parameter
$finalQuery = new WP_Query(array('post__in' => $allTheIDs));

আশাকরি এটা সাহায্য করবে

--- সম্পাদনা ---

আমার উত্তরের পরে মূল প্রশ্নটি মাল্টিসাইটের বিশদগুলির জন্য সম্পাদিত হয়। মাল্টিসাইট পোস্ট মার্জ হওয়ার ক্ষেত্রে এটি কাজ করে না।


2
এই উত্তরটি ভাল কাজ করে এবং শীর্ষ সমাধানের চেয়ে হ্যাকের মতো কম মনে করে। এক বছর বা তারও অনেক আগে এটি ব্যবহৃত হয়েছিল এবং এখনই এটি আবার ব্যবহার করতে ফিরে এসেছিল। ধন্যবাদ.
ডেভি

যখন পোস্ট_আইডিগুলি মাল্টিসাইট স্কোপগুলিতে অনন্য নয় (ঠিকমতো ব্লগে তারা অনন্য তবে বেশ কয়েকটি পোস্টে নেটওয়ার্ক জুড়ে একই আইডি থাকতে পারে) কীভাবে এটি সঠিকভাবে কাজ করতে পারে?
অ্যাডাল

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

3
আপনি 'orderby' => 'post__in'শেষ কোয়েরিতে ব্যবহার করে বাছাই সংরক্ষণ করতে পারেন ।
ফ্রেগান্ট

2
কাস্টম পোস্টের ধরণের জন্য, আমার মনে হয়, পোস্ট টাইপ পরমের যে কোনও ক্ষেত্রে, আইডির মাধ্যমে জিজ্ঞাসা করা দরকার, কারণ এটি পোস্ট_টাইপ = ডিফল্টরূপে পোস্ট @ রবটি
বোরা ইয়ালসিন

4

সুতরাং, আপনার যদি এটি থাকে:

$number1 = new WP_Query($multisitequery);

$number2 = new WP_Query($normalquery);

আমি ধরে নিলাম আপনি কোথাও এটিকে সংজ্ঞায়িত করেছেন?

$multisitequery = array();
$normalquery = array();

... এই ক্ষেত্রে দুটি ক্যোয়ারিকে মার্জ করার জন্য কেবল array_merge()দুটি অ্যারে এগুলি দেওয়ার আগে new WP_Query():

$merged_query_args = array_merge( $normalquery, $multisitequery );

$merged_query = new WP_Query( $merged_query_args );

নোট করুন যে আদেশে array_merge()কল গুরুত্বপূর্ণ । যদি উভয়ের একই অ্যারে কী থাকে তবে দ্বিতীয় অ্যারে প্রথম অ্যারেটি ওভাররাইট করে।


চিপ জবাব দেওয়ার জন্য আপনাকে অনেক ধন্যবাদ আমার কী কাজ করতে হবে সে সম্পর্কে আপনাকে আরও ভাল ধারণা দেওয়ার জন্য আমি আমার মূল প্রশ্নটি সম্পাদনা করেছি। অনেক ধন্যবাদ সত্যই এবং আমি অপর একটি জ্ঞান সমৃদ্ধ জবাবের অপেক্ষায় থাকলাম ধন্যবাদ
ররি রোথন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.