নন-মেটা অনুসন্ধানগুলিতে সদৃশ ফলাফলগুলি এড়াতে আমি এই প্রশাসক কোয়েরি স্নিপেটকে কীভাবে উন্নত করব?


11

আমি কোড স্নিপেটের সাথে খেলছিলাম যা অ্যাডমিন অনুসন্ধানগুলিতে মেটা ডেটা যুক্ত করে।

আমি খুঁজে পেয়েছি সেরা স্নিপেট এই প্রশ্নে স্টেফানো লিখেছিলেন ।

তবে, মেটা-বিহীন পদগুলি অনুসন্ধান করার সময় এটির 1, বিরক্তিকর বাগ রয়েছে বলে মনে হয়।

আমার স্থানীয় ডেভ ইনস্টল থেকে এখানে কিছু গ্রাব রয়েছে। আমি স্ক্রিনে 2 মাইএসকিউএল ক্যোয়ারী প্রিন্ট করেছি।

আমি পরীক্ষা করতে ব্যবহার করছি একক সিপিটি পোস্টের ভিউ

আমি পরীক্ষা করতে ব্যবহার করছি একক সিপিটি পোস্টের ভিউ

এটি কোডটি প্রত্যাশিত হিসাবে কাজ করছে এবং আমাকে অ্যাডমিনের থেকে মেটা ডেটা অনুসন্ধান করার অনুমতি দিচ্ছে

এটি কোডটি প্রত্যাশিত হিসাবে কাজ করছে এবং আমাকে অ্যাডমিনের থেকে মেটা ডেটা অনুসন্ধান করার অনুমতি দিচ্ছে

দুর্ভাগ্যক্রমে কোড শিরোনামে এই ক্ষেত্রে নন-মেটা ম্যাচে নকল তৈরি করে

দুর্ভাগ্যক্রমে কোড শিরোনামে এই ক্ষেত্রে নন-মেটা ম্যাচে নকল তৈরি করে

পোস্টের স্থিতি, পোস্টের ধরণ এবং ডুপসের পূর্বপুরুষদের পোস্ট দেখানো একটি দখল

! পোস্টের স্থিতি, পোস্টের ধরণ এবং ডুপসের পূর্বপুরুষদের পোস্ট দেখানো একটি দখল

আমি যে কোডটি চালাচ্ছি সেগুলি এখানে, এটি মূলত স্টেফানোর মতো, তবে কোয়েরিটি কাজ করার জন্য আমার অপচেষ্টার চেষ্টা রয়েছে।

/*
 * Search custom fields from admin keyword searches
 */

function rel_search_join( $join ) {
    global $pagenow, $wpdb;
    if ( is_admin() && $pagenow == 'edit.php' && $_GET['post_type'] == 'listings' && $_GET['s'] != '') {    
        $join .= 'LEFT JOIN ' . $wpdb->postmeta . ' ON '. $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id ';
    }
    echo '<br><strong>JOIN</strong>: ';
    print_r ( $join );
    echo '<br>';
    return $join;
}
add_filter('posts_join', 'rel_search_join' );

function rel_search_where( $where ) {
    global $pagenow, $wpdb;
    if ( is_admin() && $pagenow == 'edit.php' && $_GET['post_type']=='listings' && $_GET['s'] != '' ) {
        $where = preg_replace( "/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/", "(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where );
        $where = str_replace( "OR wp_posts.post_status = 'pending'", "", $where );
        $where = str_replace( "OR wp_posts.post_status = 'private'", "", $where );
        $where = str_replace( "OR wp_posts.post_status = 'draft'", "", $where );
        $where = str_replace( "OR wp_posts.post_status = 'future'", "", $where );
    }
    echo '<br><strong>WHERE</strong>: ';
    print_r ( $where );
    echo '<br>';
    return $where;
}
add_filter( 'posts_where', 'rel_search_where' );  

সম্ভবত এটি সংশোধনগুলিও তালিকাভুক্ত করে?
Passatgt

আমি ভেবেছিলাম আমি কেবল প্রকাশিত দিকে তাকিয়ে আছি, কারণ আমি মুলতুবি, ব্যক্তিগত, খসড়া এবং ভবিষ্যত সরিয়েছি। পুনর্বিবেচনার ধরণটি লক্ষ্য করেনি।
jnthnclrk

হুম, কোনও "সংশোধনী" স্থিতি হিসাবে উপস্থিত হবে না: কোডেক্স.ওয়ার্ডপ্রেস.আর
পোস্ট

পোস্টের টাইপ বা পোস্ট আইডিটি কলামগুলির মধ্যে একটিতে প্রিন্ট করার চেষ্টা করুন, আমি মনে করি সংশোধনগুলি পোস্টের ধরণ, সুতরাং আপনি যদি পুনর্বিবেচনাগুলি দেখতে পারেন তবে ফলাফলগুলিতেও তা আপনার রয়েছে। তবে আমি এটিও দেখতে পাচ্ছি যে আপনি কেবল তালিকা পোস্টের ধরণের ফলাফলগুলি প্রদর্শন করেন, তাই আমার মনে হয় আমি ভুল। তবে এটি চেষ্টা করে দেখুন :)
Passatgt

পোস্ট স্ট্যাটাস, পোস্টের ধরণ এবং পোস্ট পূর্বপুরুষদের সাথে একটি নতুন দখল যুক্ত করা হয়েছে।
jnthnclrk

উত্তর:


11

একটি GROUP BYবিবৃতি এর পরে আপনার পোস্টগুলিকে গ্রুপ করতে পারে JOIN। ওয়ার্ডপ্রেসের জন্য আপনি posts_groupbyফিল্টারটি ব্যবহার করতে পারেন ।

add_filter( 'posts_groupby', 'my_post_limits' );
function my_post_limits($groupby) {
    global $pagenow, $wpdb;
    if ( is_admin() && $pagenow == 'edit.php' && $_GET['post_type']=='listings' && $_GET['s'] != '' ) {
        $groupby = "$wpdb->posts.ID";
    }
    return $groupby;
}

4

লোকেরা এই বিষয়ে আপনার কাজের জন্য ধন্যবাদ। এই কোডটি আমাকে বেশিরভাগ পথে পেয়েছিল, তবে ডাব্লুপি ৩.৮ ব্যবহার করে আমি একটি এসকিউএল অ-অনন্য-টেবিল / ওরফে ত্রুটি পেয়েছিলাম, তাই আমি কিছু পরিবর্তন করেছি। এটি আমার সেটআপে কাজ করার জন্য আমাকে একটি $ wpdb-> পোস্টমেটা ওরফে সেট করতে হয়েছিল যা জওআইএন বিবৃতিতে ব্যবহৃত হয়েছিল। আমি কেবল একবার চেক করে দেখেছি যে হুকগুলি ব্যবহার করা উচিত যাতে তারা প্রতিবার গুলি চালায় না। আশা করি এটি কাউকে সাহায্য করবে!

global $postmeta_alias, $is_specials_search;
$cpt_name = 'special';
$postmeta_alias = 'pdpm'; // Change this to whatever your custom post type is
$is_specials_search = is_admin() && $pagenow=='edit.php' && isset( $_GET['post_type'] ) && $_GET['post_type']==$cpt_name && isset( $_GET['s'] );

// Extend search to include 'description' field
if ( $is_specials_search ) {
  add_filter( 'posts_join',      'pd_description_search_join' );
  add_filter( 'posts_where',     'pd_description_search_where' );
  add_filter( 'posts_groupby',   'pd_search_dupe_fix' );
}

function pd_description_search_join ($join){
  global $pagenow, $wpdb, $postmeta_alias, $is_specials_search;

  if ( $is_specials_search )  
    $join .='LEFT JOIN '.$wpdb->postmeta. ' as ' . $postmeta_alias . ' ON '. $wpdb->posts . '.ID = ' . $postmeta_alias . '.post_id ';

  return $join;
} // END search_join

function pd_description_search_where( $where ){
  global $pagenow, $wpdb, $postmeta_alias, $is_specials_search;

  if ( $is_specials_search )
    $where = preg_replace(
     "/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
     "(".$wpdb->posts.".post_title LIKE $1) OR (".$postmeta_alias.".meta_value LIKE $1)", $where );

  return $where;
} // END search_where

function pd_search_dupe_fix($groupby) {
    global $pagenow, $wpdb, $is_specials_search;

    if ( $is_specials_search )
      $groupby = "$wpdb->posts.ID";

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