সন্ধানে কাস্টম ট্যাক্সনোমি শব্দটি অন্তর্ভুক্ত করুন


33

আমি দুটি কাস্টম পোস্ট ধরণের ক্ষেত্রে দুটি কাস্টম ট্যাক্সনোমী প্রয়োগ করেছি। সাইডবারের শর্তাদি তালিকা ঠিক আছে এবং এর সাথে যুক্ত সমস্ত পোস্টের তালিকা দেবে। তবে, আপনি যদি নির্দিষ্ট পদগুলির একটিতে অনুসন্ধান করেন তবে এটি সেই পদটি নিয়ে কোনও পোস্ট আনবে না।

উদাহরণ: http://dev.andrewnorcross.com/das/all-case-studies/ "পিকিউআরআই" শব্দটির জন্য অনুসন্ধান করুন

আমি কিছুই পাই না। কোন ধারনা? আমি বিভিন্ন অনুসন্ধান প্লাগইন ব্যবহার করার চেষ্টা করেছি তবে তারা হয় আমার কাস্টম অনুসন্ধানের পরামিতিগুলি ভেঙে দেয় বা কেবল কাজ করে না।


নোক্রস, আপনি কি জান দ্বারা প্রস্তাবিত উত্তর কিছু প্রতিক্রিয়া যোগ করতে পারেন? আপনি সম্ভবত একটি প্লাগইন খুঁজছেন যা কাজ করে?
hakre

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

উত্তর:


36

আমি অনুসন্ধানের সমস্ত প্লাগইনটিও সুপারিশ করব , তবে আপনি যদি ডাব্লুপি এর অনুসন্ধান ফাংশনটি ব্যবহার করে এটি প্রয়োগ করতে চান তবে আমি আমার এটম থিমটিতে কোডটি ব্যবহার করছি:

// search all taxonomies, based on: http://projects.jesseheap.com/all-projects/wordpress-plugin-tag-search-in-wordpress-23

function atom_search_where($where){
  global $wpdb;
  if (is_search())
    $where .= "OR (t.name LIKE '%".get_search_query()."%' AND {$wpdb->posts}.post_status = 'publish')";
  return $where;
}

function atom_search_join($join){
  global $wpdb;
  if (is_search())
    $join .= "LEFT JOIN {$wpdb->term_relationships} tr ON {$wpdb->posts}.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id INNER JOIN {$wpdb->terms} t ON t.term_id = tt.term_id";
  return $join;
}

function atom_search_groupby($groupby){
  global $wpdb;

  // we need to group on post ID
  $groupby_id = "{$wpdb->posts}.ID";
  if(!is_search() || strpos($groupby, $groupby_id) !== false) return $groupby;

  // groupby was empty, use ours
  if(!strlen(trim($groupby))) return $groupby_id;

  // wasn't empty, append ours
  return $groupby.", ".$groupby_id;
}

add_filter('posts_where','atom_search_where');
add_filter('posts_join', 'atom_search_join');
add_filter('posts_groupby', 'atom_search_groupby');

এটি ট্যাগ-অনুসন্ধান প্লাগইনের উপর ভিত্তি করে: http://projects.jesseheap.com/all-projects/wordpress-plugin-tag-search-in-wordpress-23


1
এটি দুর্দান্ত - এই কোডটি কীভাবে অনুসন্ধান থেকে ট্যাক্সোনমি আইডির একটি অ্যারে বাদ দিতে সংশোধন করা যায়?
HandiworkNYC.com

এটি লক্ষ করা উচিত যে এই হুকগুলির জন্য ফিল্টার কলব্যাকগুলি 2 টি যুক্তি গ্রহণ করে; তাদের সবার জন্য দ্বিতীয়টি হ'ল ডাব্লুপি_কিউরি উদাহরণ যা রেফারেন্স দ্বারা পাস করা হয়। টেমপ্লেট ফাংশনটি না করে সর্বদা মূল ক্যোয়ারির রেফারেন্সের পরিবর্তে যে কোনও চেক is_search()বা অন্যান্য ডাব্লুপিউকিউয়ারি পদ্ধতি কল ( is_search() is_home()ইত্যাদি) -কে সর্বদা সরাসরি ক্যোরির উদাহরণে কল করা উচিত (উদাহরণস্বরূপ $query->is_search()উদাহরণের পরিবর্তনশীলটির নাম $queryকলব্যাক স্বাক্ষরে রয়েছে) always , ফিল্টারটি চলছে এমন কোয়েরি নয়।
ইভান ম্যাটসন

4
এছাড়াও, সম্ভবত কোনও এসকিউএল ক্যোয়ারিতে কাঁচা পাবলিকভাবে উপলভ্য অনুসন্ধানের স্ট্রিংটি ইনজেক্ট করা ভাল ধারণা নয় ... পড়ার প্রস্তাব দেওয়া হয়েছে
ইভান ম্যাটসন

আমি কেবল যুক্ত করতে চাই যে ডাব্লুপিএমএল এর সাথে এর বিরোধ রয়েছে কারণ ডাব্লুপিএমএল আলরেডি যোগদানের অংশে 'টি' ব্যবহার করে, তাই ট্র,
টিটি

7

এটি কি আদর্শ ওয়ার্ডপ্রেস অনুসন্ধান? কারণ এটি অনুসন্ধানের ক্ষেত্রে কর বিভাগগুলি (এমনকি মান নয়, বিভাগ এবং ট্যাগগুলির মতো) অন্তর্ভুক্ত বলে মনে হয় না । কোডটি সন্ধান করে post_titleএবং post_contentতবে আপনি যদি অন্য কোনও কিছু অন্তর্ভুক্ত করতে চান তবে আপনাকে posts_searchফিল্টারটিতে প্রবেশ করতে হবে ।


5

আমি ওনেট্রিকপোনির সমাধানটি https://wordpress.stackexchange.com/a/5404/37612 এর উপরে চেষ্টা করেছি , যা দুর্দান্ত তবে আমি সেখানে একটি সমস্যা পেয়েছি, যা আমার পক্ষে কার্যকর হয়নি এবং আমি একটি ছোট পরিবর্তন করব:

  1. যদি আমি বিভাগের শিরোনামে একটি স্ট্রিং সন্ধান করি - এটি দুর্দান্ত কাজ করে
  2. যদি বিভাগে বিশেষ অক্ষর থাকে যেমন জার্মান "উমলাউটস" (ö, ä, ü) এবং একটি বিশেষ চর ব্যবহার করার জন্য ওএ, আ, ইন্স্টেডা অনুসন্ধান করে - আপনাকে বিভাগের স্লাগে অনুসন্ধান যুক্ত করতে হবে - OR t.slug LIKE '%".get_search_query()."%'

  3. আপনি যদি কোনও অনুসন্ধান কোয়েরি এবং একটি শ্রমশক্তি ফিল্টারের সংমিশ্রণটি অনুসন্ধান করেন - এটিও দুর্দান্ত কাজ করে

  4. তবে সমস্যাটি হ'ল, যখন আপনি কেবলমাত্র করশাসন ফিল্টারটি ব্যবহার করার চেষ্টা করবেন - অনুসন্ধানের হুকটি কোনও পাঠ্যের সন্ধান না করা হলে ক্যোয়ারিতে একটি খালি স্ট্রিং যুক্ত করে এবং সেই কারণে আপনি ফলাফলগুলি থেকে সমস্ত পোস্ট পেতে পরিবর্তে ফলাফলটিতে সমস্ত পোস্ট পাবেন ফিল্টার করা বিভাগ একটি সাধারণ আইএফ স্টেটমেন্ট সমস্যার সমাধান করে। সুতরাং পুরো সংশোধিত কোডটি এটিই হবে (আমার পক্ষে পুরোপুরি সূক্ষ্ম কাজ করে!)

কাস্টম_সার্চ_এইখানে (where যেখানে) function ফাংশন 
  গ্লোবাল $ wpdb;
  যদি (হয়_সন্ধান () এবং&_ get_search_query ())
    $ যেখানে। = "বা ((t.name পছন্দ '%'"। get_search_query ()। "% 'OR t.slug পছন্দ'%"। get_search_query ()। "%") এবং {$ wpdb-> পোস্ট p পোস্ট_স্ট্যাটাস = 'প্রকাশ') ";
  ফিরে $ যেখানে;
}

ফাংশন কাস্টম_সন্ধান_জয়েন ($ যোগদান)
  গ্লোবাল $ wpdb;
  যদি (হয়_সন্ধান () এবং&_ get_search_query ())
    $ যোগদান করুন। $ wpdb-> পদসমূহ} t ON t.term_id = tt.term_id ";
  প্রত্যাবর্তন $ join;
}

ফাংশন কাস্টম_সার্চ_গ্রুপবি ($ গ্রুপবাই) {
  গ্লোবাল $ wpdb;

  // আমাদের পোস্ট আইডিতে গ্রুপ করা দরকার
  $ groupby_id = "{$ wpdb-> পোস্টগুলি ID .ID";
  যদি (! is_search () || strpos ($ groupby, $ groupby_id)! == মিথ্যা ||! get_search_query ()) ফেরত দিন $ গ্রুপবাই;

  // গ্রুপবাই খালি ছিল, আমাদের ব্যবহার করুন
  যদি (! স্ট্রেন (ট্রিম ($ গ্রুপবি))) ফিরে আসে $ গ্রুপবাই_আইডি;

  // খালি ছিল না, আমাদের সংযোজন
  $ groupby। ","। $ groupby_id;
}

add_filter ( 'posts_where', 'custom_search_where');
যোগ_ ফিল্টার ('পোস্ট_জয়িন', 'কাস্টম_সন্ধান_জয়িন');
যোগ_ ফিল্টার ('পোস্ট_গ্রুপবি', 'কাস্টম_সার্ক_গ্রুপবি');

3

আমার কাছে জানের মতো একই স্তরের তথ্য রয়েছে I আমি জানি প্লাগিনগুলির সাহায্যে অনুসন্ধানও প্রসারিত করা সম্ভব।

সম্ভবত আপনি যা সন্ধান করছেন সবকিছুই (ওয়ার্ডপ্রেস প্লাগইন) অনুসন্ধান করুন। বৈশিষ্ট্য তালিকা অনুসারে, এটি এখন কাস্টম ট্যাক্সনোমিকে সমর্থন করে।


অনুসন্ধানের জন্য সমস্ত প্লাগইন +1। এটি প্রত্যাশার মতো কাজ করে এবং স্ট্যান্ডার্ড ওয়ার্ডপ্রেস অনুসন্ধানের চেয়ে বেশি ফলাফল দেয়।
পিএনএমজি

2

আমি অনেট্রিকপনি থেকে উত্তরটি দুর্দান্ত বলে খুঁজে পেয়েছি তবে এটি কোনও অনুসন্ধানকে একক শব্দ হিসাবে বিবেচনা করে এবং উদ্ধৃতি চিহ্নগুলির সাথে সংযুক্ত কোনও অনুসন্ধান বাক্যাংশের সাথেও व्यवहार করে না। atom_search_whereএই দুটি পরিস্থিতির মোকাবিলার জন্য আমি তার কোডটি (বিশেষত, ফাংশন) কিছুটা পরিবর্তন করেছি । এখানে তার কোডের আমার সংশোধিত সংস্করণটি রয়েছে:

// search all taxonomies, based on: http://projects.jesseheap.com/all-projects/wordpress-plugin-tag-search-in-wordpress-23

function atom_search_where($where){ 
    global $wpdb, $wp_query;
    if (is_search()) {
        $search_terms = get_query_var( 'search_terms' );

        $where .= " OR (";
        $i = 0;
        foreach ($search_terms as $search_term) {
            $i++;
            if ($i>1) $where .= " AND";     // --- make this OR if you prefer not requiring all search terms to match taxonomies
            $where .= " (t.name LIKE '%".$search_term."%')";
        }
        $where .= " AND {$wpdb->posts}.post_status = 'publish')";
    }
  return $where;
}

function atom_search_join($join){
  global $wpdb;
  if (is_search())
    $join .= "LEFT JOIN {$wpdb->term_relationships} tr ON {$wpdb->posts}.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id INNER JOIN {$wpdb->terms} t ON t.term_id = tt.term_id";
  return $join;
}

function atom_search_groupby($groupby){
  global $wpdb;

  // we need to group on post ID
  $groupby_id = "{$wpdb->posts}.ID";
  if(!is_search() || strpos($groupby, $groupby_id) !== false) return $groupby;

  // groupby was empty, use ours
  if(!strlen(trim($groupby))) return $groupby_id;

  // wasn't empty, append ours
  return $groupby.", ".$groupby_id;
}

add_filter('posts_where','atom_search_where');
add_filter('posts_join', 'atom_search_join');
add_filter('posts_groupby', 'atom_search_groupby');

1

WooCommerce কার্ট প্লাগইন নিয়ে আমার একই সমস্যা চলছে .. আমার অনুসন্ধানের ফলাফলগুলি কাস্টম ট্যাক্সনোমি শব্দ, 'product_tag' সহ অন্তর্ভুক্ত নয়, কারণ এটি কোনও স্ট্যান্ডার্ড পোস্ট ট্যাগ নয়। আমি এই অন্যান্য স্ট্যাকওভারফ্রো থ্রেডে একটি সমাধান পেয়েছি:

https://stackoverflow.com/questions/13491828/how-to-amend-wordpress-search-so-it-queries-taxonomy-terms-and-category-terms

কার্ট প্লাগইনগুলির জন্য আমাদের প্রয়োজন অনুসারে তার উদাহরণটিতে পদটি প্রতিস্থাপনের সময় টেল্লি কোড কোড আমার জন্য কাজ করেছিল ।authorproduct_tag

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