मैं कोड स्निपेट्स के साथ खेल रहा हूं, जो व्यवस्थापक खोजों में मेटा डेटा जोड़ते हैं।
सबसे अच्छा स्निपेट मैंने पाया है, इस सवाल पर स्टेफानो ने लिखा था ।
हालाँकि, यह गैर-मेटा शर्तों को खोजते समय 1, कष्टप्रद बग दिखाई देता है।
यहाँ मेरे स्थानीय देव से कुछ क़ब्रें स्थापित हैं। मैंने स्क्रीन पर 2 MySQL प्रश्नों को प्रिंट किया है।
परीक्षण करने के लिए मैं उपयोग कर रहा हूँ एकल सीपीटी पोस्ट का दृश्य
यह उम्मीद के मुताबिक काम करने वाला कोड है और मुझे एडमिन से मेटा डेटा खोजने की अनुमति देता है
दुर्भाग्य से कोड शीर्षक पर इस मामले में, गैर-मेटा मैचों पर डुप्लिकेट बनाता है
डाक की स्थिति, डाक के प्रकार और डाक के पूर्वजों को दिखाने वाला हड़प
! डाक की स्थिति, डाक के प्रकार और डाक के पूर्वजों को दिखाने वाला हड़प
यहां वह कोड है जो मैं चला रहा हूं, यह मूल रूप से स्टेफानो के समान है, लेकिन क्वेरी काम करने के लिए मेरे कच्चे प्रयासों के साथ।
/*
* 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' );