Forum Replies Created

Viewing 3 replies - 1 through 3 (of 3 total)
  • Have also added a list for commonly spoken world languages:
    http://ww.wp.xz.cn/support/topic/332938

    Found 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
    						";

    This 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

Viewing 3 replies - 1 through 3 (of 3 total)