tommcd
Forum Replies Created
-
Forum: Plugins
In reply to: [Plugin: cformsII – contact form] Country drop down listHave also added a list for commonly spoken world languages:
http://ww.wp.xz.cn/support/topic/332938Forum: Fixing WordPress
In reply to: Ordering posts by Custom FieldFound a solution. I have a feeling there is probably a much more simple way to do this though. So any tips on cleaning up my horredous code would be welcomed!
// Search build // Put form input into values $venue_search_value = $_REQUEST['venue'] ; $date_search_value = $_REQUEST['date'] ; $keyword_search_value = $_REQUEST['keywords'] ; $order_results_by_value = $_REQUEST['orderby'] ; // If not a search do nothing if ( $venue_search_value == '' && $date_search_value == '' && $keyword_search_value == '' ) { } else { // Start building query string if($venue_search_value == '') { $venue_search_query = '' ; } else { $venue_search_query = "AND venue.meta_value = '$venue_search_value'" ; } if($date_search_value == '') { $date_search_query = '' ; } else { $date_search_query = "AND starttime.meta_value LIKE '$date_search_value%' " ; } if ($order_results_by_value == 'date') { $order_search_query = "starttime.meta_value" ; } elseif ($order_results_by_value == 'title') { $order_search_query = "$wpdb->posts.post_title" ; } else { $order_search_query = "starttime.meta_value" ; } // todo: find a way to search post title and post meta by keyword. if($keyword_search_value == '') { $keyword_search_query = "$wpdb->posts.post_parent = $post->ID $venue_search_query $date_search_query AND $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'page' " ; } else { $keyword_search_query = " $wpdb->posts.post_content LIKE '%$keyword_search_value%' $venue_search_query $date_search_query AND $wpdb->posts.post_parent = $post->ID AND $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'page' OR $wpdb->posts.post_title LIKE '%$keyword_search_value%' $venue_search_query $date_search_query AND $wpdb->posts.post_parent = $post->ID AND $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'page' OR $wpdb->postmeta.meta_value LIKE '%$keyword_search_value%' $venue_search_query $date_search_query AND $wpdb->posts.post_parent = $post->ID AND $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'page' " ; } // Query the database for the posts $query_string = " SELECT * FROM $wpdb->posts LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id) LEFT JOIN $wpdb->postmeta AS starttime ON ($wpdb->posts.ID = starttime.post_id AND starttime.meta_key = 'Start time') LEFT JOIN $wpdb->postmeta AS venue ON ($wpdb->posts.ID = venue.post_id AND venue.meta_key = 'Venue') WHERE $keyword_search_query ORDER BY $order_search_query ASC ";Forum: Fixing WordPress
In reply to: Ordering posts by Custom FieldThis post has been really useful to me in putting together a much more complicated search which takes on multiple query variables.
// Search build // Put form input into values $venue_search_value = $_REQUEST['venue'] ; $date_search_value = $_REQUEST['date'] ; $keyword_search_value = $_REQUEST['keywords'] ; $order_results_by_value = $_REQUEST['orderby'] ; // If not a search do nothing if ( $venue_search_value == '' && $date_search_value == '' && $keyword_search_value == '' ) { } else { // Start building query string if($venue_search_value == '') { $venue_search_query = '' ; } else { $venue_search_query = "AND venue.meta_value = '$venue_search_value'" ; } if($date_search_value == '') { $date_search_query = '' ; } else { $date_search_query = "AND starttime.meta_value LIKE '$date_search_value%' " ; } // todo: find a way to search post title and post meta by keyword. if($keyword_search_value == '') { $keyword_search_query = '' ; } else { $keyword_search_query = "AND $wpdb->posts.post_content LIKE '%$keyword_search_value%' OR $wpdb->posts.post_title LIKE '%$keyword_search_value%' OR $wpdb->postmeta.meta_value LIKE '%$keyword_search_value%' " ; " ; } if ($order_results_by_value == 'date') { $order_search_query = "starttime.meta_value" ; } elseif ($order_results_by_value == 'title') { $order_search_query = "$wpdb->posts.post_title" ; } else { $order_search_query = "starttime.meta_value" ; } // Query the database for the posts $query_string = " SELECT * FROM $wpdb->posts LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id) LEFT JOIN $wpdb->postmeta AS starttime ON ($wpdb->posts.ID = starttime.post_id AND starttime.meta_key = 'Start time') LEFT JOIN $wpdb->postmeta AS venue ON ($wpdb->posts.ID = venue.post_id AND venue.meta_key = 'Venue') WHERE $wpdb->posts.post_parent = $post->ID $venue_search_query $date_search_query $keyword_search_query AND $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'page' ORDER BY $order_search_query ASC ";You’ll have to forgive my awful PHP markup – I’m pretty new to this!
My main problem is with the $keyword_search_query variable. I need to search the Post Title, Post Content and all the Custom Fields Values for the user inputted $keyword_search_value .
However using the AND argument means all these SQL columns need to contain this argument (I only need one of them to contain it for SQL to return it as a result). Whereas using the OR argument in it’s place means all the other AND arguments previously given are all ignored.
Any help would be very much appreciated