Category: WordPress

WordPress search Post(news) with ajax

js code


/* All filter news and pagination*/
jQuery('.news-filter .categoryCheck').on( 'change' , function() {
if(!jQuery(this).val()){
jQuery('.news-filter .categoryCheck').prop( "checked", false );
}
load_news_list(0,1);
});

jQuery('.search-btn').on( 'click' , function() {
load_news_list(0,1);
});
jQuery('#srch_keyword').on('keypress', function(e){
if(e.keyCode == '13'){
e.preventDefault();
load_news_list(0,1);
}
});
jQuery('.pagination').on( 'click', '.page-numbers', function( event ) {
event.preventDefault();
page = find_page_number(jQuery(this));
var post_length = jQuery( '.news-div' ).length;
load_news_list( post_length, page);
});

 

/* load news list */
function load_news_list(post_length, page) {

var news_cats = jQuery('.categoryCheck:checked').map(function() {return this.value;}).get().join(',');
var year = ( jQuery( '#year' ).length > 0 ) ? jQuery( '#year' ).val() : '';
var monthnum = ( jQuery( '#monthnum' ).length > 0 ) ? jQuery( '#monthnum' ).val() : '';
var search_val = jQuery('#srch_keyword').val();
// jQuery( '.clear-all' ).css( 'display' , 'none' );
if( news_cats.length > 0 ) {
jQuery( '.clear-all' ).css( 'display' , 'inline-block' );
}

jQuery.ajax({
type: "POST",
url: adminurl,
data: { action : 'load_news', news_cats: news_cats, post_length : post_length, year: year, monthnum: monthnum ,search:search_val, page: page},
success: function (result){
var responseData = JSON.parse(result);
jQuery( '.load-more-news' ).remove();
jQuery( '.news-listing' ).empty();
jQuery( '.news-listing' ).append(responseData.news);
jQuery( '.pagination' ).empty()
jQuery( '.pagination' ).append(responseData.pagination);
},
error:function(){
alert("Error: There is some issue please try again.");
},
beforeSend:function(){
jQuery( '.load-result' ).css( 'display' , 'block' );
},
complete: function () {
jQuery( '.load-result' ).css( 'display' , 'none' );
}
});
}

 

WordPress code


add_action( 'wp_ajax_nopriv_load_news', 'load_news' );
add_action( 'wp_ajax_load_news', 'load_news' );
function load_news() {
$per_page = 12;
$paged = ( isset($_POST['page']) ) ? $_POST['page'] : 1 ;
$offset = (( $paged - 1 ) * $per_page);
/* if( !empty( $_POST['post_length'] ) ) { */
$post_length = $_POST['post_length'];
//$offset = $post_length;
$nextOffset = $offset + $per_page;
/* } */
$result = '';

$pagination = '';
$newsList = getNewsArray( $offset , $per_page , $_POST );

$result = '<div class="col-sm-12"><header class="page-header">';
$result .= '<h2 class="page-title">Sorry, it seems that we didn&rsquo;t find any results</h2>';
$result .= '</header>';
$result .= '<div class="page-content">';
$result .= '<p>Please try the search function at the top of the page to see if you can find what you&rsquo;re looking for</p>';
$result .= '</div></div>';
if ( $newsList->have_posts() ) {
$result = '';
while ( $newsList->have_posts() ) { $newsList->the_post();
$result .= post_html( $post->ID );
}
}

if($newsList->max_num_pages > 0){
$big = 999999999;
$pagination = paginate_links( array(
'type' => 'plain',
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, $paged ),
'total' => $newsList->max_num_pages,
'prev_next' => true,
'prev_text' => 'Prev',
'next_text' => 'Next',
) );
//$pagination .= football_pagination($newsList->max_num_pages);

} else {
$result .= '<div class="no-more-news"></div>';
}

$data['news'] = $result;
$data['pagination'] = $pagination;
echo json_encode( $data );

die();
}

&nbsp;
function getNewsArray( $offset , $per_page , $newsFilter ) {

$argsNews = array('post_type' => 'post', 'post_status'=> 'publish' , 'posts_per_page' => $per_page , 'offset' => $offset, 'order' => 'desc', 'orderby' => 'date' );

if( !empty($newsFilter['news_cats']) ) {
$cats = explode( ',' , $newsFilter['news_cats'] );
$argsNews['category__in'] = $cats;
}
if(!empty($newsFilter['year'])){
$argsNews['year'] = $newsFilter['year'];
}
if(!empty($newsFilter['monthnum'])){
$argsNews['monthnum'] = $newsFilter['monthnum'];
}
if(!empty($newsFilter['search'])){
$argsNews['s'] = $newsFilter['search'];
}
$newsList = new WP_Query( $argsNews );

return $newsList;
}

 

 

WordPress pagination with custom MySQL query

Simple pagination with custom query


$per_page = 50; # Set per page
$paged = ( get_query_var('paged') != 0 ) ? get_query_var('paged') : 1 ; ## get paged number
$offset = (( $paged - 1 ) * $per_page); ## set offset

$trial_list = football_trial_list(null, $offset, $per_page);

$trial_total = football_trial_list(null,0,-1);
$total = count($trial_total);

$max_num_pages = ceil( $total / $per_page );

$pagination = football_pagination($max_num_pages);

function football_trial_list($post_id = null, $offset = 0, $per_page = 3, $request = null){
global $wpdb;
$user_id = get_current_user_id();
$table_team = $wpdb->prefix . 'trial';

$distance = "";
if(isset($request) && !empty($request)){
if(isset($request['post_code']) && !empty($request['post_code'])){

$address_data = football_get_latitude_longitude($request['post_code']);
$lat = $address_data['lat'];
$lng = $address_data['lng'];

$distance = ", ( 3959 * acos( cos( radians(".$lat.") ) * cos( radians( tr.lat ) ) * cos( radians( tr.lng ) - radians(".$lng.") ) + sin( radians(".$lat.") ) * sin( radians( tr.lat ) ) ) ) AS distance";
}
}

$query = "SELECT tr.*, p.post_title, p.post_content $distance FROM $table_team AS tr ";
$query .= " INNER JOIN ".$wpdb->prefix."posts AS p ON ( tr.post_id = p.ID ) ";
$query .= " WHERE p.post_type = 'trials' AND p.post_status = 'publish' ";

// if get single post data
if(!empty($post_id) && $post_id != null){
$query .= " AND p.ID = $post_id ";
}

if(isset($request) && !empty($request)){
// if(isset($request['post_code']) && !empty($request['post_code'])){
// $query .= " AND tr.postcode LIKE '%".$request['post_code']."%'";
// }

if(isset($request['trial_name']) && !empty($request['trial_name'])){
$query .= " AND p.post_title LIKE '%".$request['trial_name']."%'";
}
if(isset($request['trial_age']) && !empty($request['trial_age'])){
if($request['trial_age'] >= 35)
$query .= " AND tr.trial_age >= ".$request['trial_age']."";
else
$query .= " AND tr.trial_age <= ".$request['trial_age']."";
}

// if(!empty($request['post_code']) && !empty($request['distance_min']) && !empty($request['distance_max'])){
if(!empty($request['post_code'])){
$query .= " HAVING distance BETWEEN ".$request['distance_min']." AND ".$request['distance_max']." ";
}

// Upcoming Trials
if(isset($request['upcoming']) && $request['upcoming'] = true){
$query .= " AND tr.trial_date >= CURDATE()";
}
}
else{
$query .= " AND tr.user_id = $user_id ";
}

// Upcoming Trials
if(isset($request['upcoming']) && $request['upcoming'] = true)
$query .= " ORDER BY tr.trial_date ASC ";
else
$query .= " ORDER BY p.post_date DESC ";

if($per_page != -1){
$query .= " LIMIT $offset, $per_page";
}

// echo $query; #die;
return $wpdb->get_results( $query, OBJECT );
}
// =============================================
// Default pagination
// =============================================
function football_pagination($max_num_pages){

if($max_num_pages > 1){
$big = 999999999;
$pagination = "<div class='toolbar'>";
$pagination .= paginate_links( array(
'type' => 'list',
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $max_num_pages,
'prev_next' => true,
'prev_text' => 'Prev',
'next_text' => 'Next',
) );
$pagination .= "</div>";

return $pagination;
}
else{
return '';
}
}

 

WordPress wp_nav_menu() add new custom sub menu item

If some time we need to add new menu item in drop down list. bellow code to we can add sub menu.

See demo image


function dalwadiwp_submenu_item($items, $args) {

$theme_location = 'main-menu';// Theme Location slug
## if ( $args->theme_location == 'main-menu' ) // if we can set menu location then used it.
if ( $args->menu == 19 ) // if we can not set menu location then used direct menu id.
{
// debug($items);
$existing_menu_item_db_id = 701;
$new_menu_item_db_id = 98987; // unique id number
$label = 'Log out';
$url = wp_logout_url(get_permalink());

if ( is_user_logged_in() ) {

// only if user is logged-in, do sub-menu link
$item = array(
'title' => $label,
'menu_item_parent' => $existing_menu_item_db_id,
'ID' => 'log-out',
'db_id' => $new_menu_item_db_id,
'url' => $url,
// 'classes' => array( 'custom-menu-item' )// optionally add custom CSS class
);

$items[] = (object) $item;
}
}
return $items;
}

add_filter('wp_nav_menu_objects', 'dalwadiwp_submenu_item',10 , 2);

 

WordPress remove plugin deactivate link(option) from admin


add_filter( 'plugin_action_links', 'disable_plugin_deactivation', 10, 4 );
function disable_plugin_deactivation( $actions, $plugin_file, $plugin_data, $context ) {


// Remove edit link for all
if ( array_key_exists( 'edit', $actions ) )
unset( $actions['edit'] );


// Remove deactivate link for crucial plugins
if ( array_key_exists( 'deactivate', $actions ) && in_array( $plugin_file, array(
'woocommerce/woocommerce.php',
'contact-form-7/wp-contact-form-7.php'
)))
unset( $actions['deactivate'] );
return $actions;
}

WordPress file protected with user login

Some time we deed to give option to user download PDF, Doc file the protected with user login

On Download action code as like below


foreach($download_list as $list) {
$title = $list['title'];
$download = $list['download']['url'];

$path = get_home_url().'/';
$dir = '';
$resource_src = str_replace($path, $dir, $download);
$data = base64_encode($resource_src.'^'.get_current_user_id());

$url = get_site_url()."/download.php?file=$data";
?>
<li><a href="<?php echo $url; ?>" target="_blank"><?php echo $title; ?></a></li>
<?php
}

Create “download.php” file from root and add below code.


include('wp-load.php');

if( !get_current_user_id() )
{
wp_redirect(site_url('login/'));
exit;
}
$rew = explode('^',base64_decode($_GET['file']));
if($rew[1] != get_current_user_id())
{
wp_redirect(site_url('login/'));
exit;
}
$file = $rew[0];
$all = $_GET['all'];
if(isset($all)) {
if(json_decode($all)) {
$allFiles = json_decode($all);
} else {
$allFiles = explode(',',$all);

}

$zipname = 'images-'.date('YmdHis').'.zip';
$zip = new ZipArchive;
$zip->open($zipname, ZipArchive::CREATE);

foreach ($allFiles as $imgfile) {
$path_parts = pathinfo($imgfile);
$ext = strtolower($path_parts["extension"]);
if($ext != 'php') {
$zip->addFile($imgfile, basename($imgfile));
}
}
$zip->close();
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=$zipname");
header("Pragma: no-cache");
header("Expires: 0");

readfile($zipname);
unlink($zipname);
}
if(isset($file)) {
download_file($file);
}
function download_file( $fullPath ){

// Must be fresh start
if( headers_sent() )
die('Headers Sent');

// Required for some browsers
if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');

// File Exists?
if( file_exists($fullPath) ){

// Parse Info / Get Extension
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);
$ext = strtolower($path_parts["extension"]);

// Determine Content Type
switch ($ext) {
case "pdf": $ctype="application/pdf"; break;
case "exe": $ctype="application/octet-stream"; break;
case "zip": $ctype="application/zip"; break;
case "doc": $ctype="application/msword"; break;
case "xls": $ctype="application/vnd.ms-excel"; break;
case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpeg":
case "jpg": $ctype="image/jpg"; break;
default: $ctype="application/force-download";
}

if($ext != 'php') {
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".basename($fullPath)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$fsize);
ob_clean();
flush();
readfile( $fullPath );
} else
die('Invalid File');

} else
die('File Not Found');

}

Good Plug in list for normal WordPress website

For create option in admin page and post
https://github.com/wp-premium/advanced-custom-fields-pro

Regenerate image size
https://wordpress.org/support/plugin/ajax-thumbnail-rebuild/

Autoptimize css and JS file
https://wordpress.org/plugins/autoptimize/

Category and taxonomy reorder
https://wordpress.org/plugins/taxonomy-terms-order/

Custom Post Order
https://wordpress.org/plugins/simple-custom-post-order/
Security
https://wordpress.org/plugins/better-wp-security/
WooCommerce PDF Invoices & Packing Slips
https://wordpress.org/plugins/woocommerce-pdf-invoices-packing-slips/
check cron job schedule
https://wordpress.org/plugins/wp-crontrol/
WP-Mail-SMTP
https://wordpress.org/plugins/wp-mail-smtp/

Set Columns
https://wordpress.org/support/plugin/genesis-easy-columns/reviews/

Stripe payment gateway

https://wordpress.org/plugins/woocommerce-gateway-stripe/

Contact Form DB

https://cfdbplugin.com/

Custom Featured Image Metabox

 

Duplicate Post

https://wordpress.org/plugins/duplicate-post/

SendGrid

https://wordpress.org/plugins/sendgrid-email-delivery-simplified/

The Events Calendar

https://wordpress.org/plugins/the-events-calendar/

W3 Total Cache

https://wordpress.org/plugins/w3-total-cache/

WordPress seo

https://wordpress.org/plugins/wordpress-seo/

YITH WooCommerce Mailchimp

https://wordpress.org/plugins/yith-woocommerce-mailchimp/

WordPress WooCommerce import product with CSV file

When we need to import product data using this script easily add or modified existing product data. also we can download last uploaded CSV file.

add_action( 'admin_menu', 'product_data_admin_menu' );
function product_data_admin_menu() {
	add_submenu_page( 'edit.php?post_type=product','Product import', 'Product import', 'manage_options', 'product_import', 'product_import_admin_section', 'dashicons-analytics', 58  );
}


function product_import_admin_section(){

?>

<div class="wrap parents_import">
	<h2>Product CSV Import</h2>
	<?php 
	
	global $wpdb,$post;
	
	$date = get_option('last_product_import_time');	

	$old_date_timestamp = strtotime($date);
	$new_date = date('Y-m-d h:i', $old_date_timestamp);
	$csv_name = get_option('last_product_import_file');
	
	if(!empty($csv_name)):
		echo '<p>You can <a href="'.get_template_directory_uri().'/csv/'.$csv_name.'" target="_blank" class="blue"><strong>download last upload file </strong></a> for reference.</p>';
		echo '<p> Last uploaded date is '.$new_date.' </p>';
	endif;	

	?>



	<form action="" method="post" id="prodcut_import" enctype="multipart/form-data">	
		<div class="fileUpload ">
			<span>Upload</span>
			<input id="uploadBtn" name="uploadfile" type="file" class="upload" />
		</div>
		<input type="submit" name="submit" class="button button-primary imp-submit-btn" value="Submit">			
		</form>
	</div>

	<?php
	
	
if (isset($_POST['submit'])){
		set_time_limit(0); 
		error_reporting(E_ERROR | E_WARNING | E_PARSE);
		
		if ($_FILES['uploadfile']['size'] != 0)
		{
			
		global $wpdb,$post;
		$filename = $_FILES['uploadfile']['name'];
		$allowed =  array('csv');
		$filename = $_FILES['uploadfile']['name'];
		$fileTmp_name = $_FILES['uploadfile']['tmp_name'];
		$fileData = file($fileTmp_name);
		$user_count = count($fileData);
		$ext = pathinfo($filename, PATHINFO_EXTENSION);
		if(in_array($ext,$allowed) ) {
			
			
			$taxonomy = 'product_cat';
			$taxonomy_brand = 'brand';
			$user_id  = 1;		

			$row = 0;
			$errorData = array();
			$countusers = array();
			if (($handle = fopen($fileTmp_name, "r")) !== FALSE) {
			while (($data = fgetcsv($handle, 5000, ",")) !== FALSE) {
						
				if($row == 0){ 
					$row++; continue;
				}
				$data = array_map("utf8_encode", $data );
				
				$SKU 				= $data[0]; # Item SKU
				$post_thumb 		= $data[1];	# Product Image
				$post_title 		= $data[2];	# Product Name
				$content 			= $data[3];	# Long Product Description
				$post_content		= (!empty($content)) ? $content : '';
				$price	 			= str_replace('$', '', $data[4]);	#Price
				$price				= preg_replace("/[^0-9\.]/", '', $price);
				$category   		= ucfirst($data[5]);	#Product Category
				$qty   				= $data[6];		#Quantity On Hand
				$stock_status			= ($qty > 0 ) ? 'instock' : 'outofstock';		#Out of Stock / In Stock
				
				$product_slider_temp	= (!empty($data[12]) ? $data[12].',':'');	#Main Image URL
				$product_slider_temp1	= $data[13];	#Product Gallery URL(s)
				
				$product_slider		= $product_slider_temp.$product_slider_temp1;
				$brand	= ucfirst($data[14]);	#Brand
				
				$distributor_a = array('regular_price'=>$distributor_discount_a,'selling_price'=>'');
				$distributor_b = array('regular_price'=>$distributor_discount_b,'selling_price'=>'');
				$distributor_c = array('regular_price'=>$distributor_discount_c,'selling_price'=>'');
				
				
				$SKUD = wc_get_product_id_by_sku($SKU);
				if($SKUD == 0){
					$my_post = array(
						'post_author' 	=> $user_id,
						'post_title'    => $post_title,
						'post_name'     => $post_title,
						'post_content'  => '',
						'post_status'   => 'publish',
						'post_type'     => 'product'
					);
								
					$lastPostid = wp_insert_post( $my_post, $wp_error );
					$ID = $lastPostid;
					if(!empty($post_thumb)){
						Generate_Featured_Image($post_thumb, $ID);
					}
					update_post_meta( $ID, '_visibility', 'visible' );
					update_post_meta( $ID, '_wpr_cp', 'no' );
					update_post_meta( $ID, '_edit_last', 1 );
					update_post_meta( $ID, '_downloadable', 'no' );
					update_post_meta( $ID, 'total_sales', 0 );
					update_post_meta( $ID, '_virtual', 'no' );
					update_post_meta( $ID, '_purchase_note', '' );
					update_post_meta( $ID, '_featured', 'no' );
					update_post_meta( $ID, '_weight', '' );
					update_post_meta( $ID, '_length', '' );
					update_post_meta( $ID, '_width', '' );
					update_post_meta( $ID, '_height', '' );
					update_post_meta( $ID, '_product_attributes', 'a:0:{}' );
					update_post_meta( $ID, '_sale_price_dates_from', '' );
					update_post_meta( $ID, '_sold_individually', '' );
					update_post_meta( $ID, '_manage_stock', 'yes' );
					update_post_meta( $ID, '_backorders', 'no' );
					update_post_meta( $ID, '_upsell_ids', 'a:0:{}' );
					update_post_meta( $ID, '_crosssell_ids', 'a:0:{}' );
					update_post_meta( $ID, '_product_version', '2.5.6' );
					update_post_meta( $ID, '_product_image_gallery', '' ); 
					
					if(!empty($category)){
						wp_set_object_terms( $ID, $category, $taxonomy, true );	
					}
					
					
					if(!empty($price)){
						update_post_meta( $ID, '_price', $price );
						update_post_meta( $ID, '_regular_price', $price  );		 
					}
					
					if(!empty($qty)){
						update_post_meta( $ID, '_stock', $qty  );
					}
					if(!empty($stock_status)){
						update_post_meta( $ID, '_stock_status', $stock_status  );
					}
					
					if(!empty($SKU)){
						update_post_meta( $ID, '_sku', $SKU  );
					}
					
					if(!empty($brand)){
						wp_set_object_terms( $ID, $brand, $taxonomy_brand, true );	
					}						
					
				}
				else{
					$SID = $SKUD;		
					$my_post = array(
						'ID'           => $SID,
						'post_title'    => $post_title,
						'post_name'     => $post_title,
						'post_content'  => '',
						'post_status'   => 'publish',
						'post_type'     => 'product'
					);
							
					$lastPostid = wp_insert_post( $my_post, $wp_error );
					
					if(!empty($post_thumb)){
						Generate_Featured_Image($post_thumb,$SID);
					}
					if(!empty($category)){
						wp_set_object_terms( $SID, $category, $taxonomy, true );	
					}
					
					if(!empty($price)){
						update_post_meta( $SID, '_price', $price );
						update_post_meta( $SID, '_regular_price', $price  );		 
					}
					
					if(!empty($qty)){
						update_post_meta( $SID, '_stock', $qty  );
					}
					if(!empty($stock_status)){
						update_post_meta( $SID, '_stock_status', $stock_status  );
					}
					
					
					if(!empty($brand)){
						wp_set_object_terms( $SID, $brand, $taxonomy_brand, true );	
					}
				}	
			}	## while end		
			fclose($handle);
			} 	## if (($handle = fopen($fileTmp_name, "r")) !== FALSE) {
			
	
		
		  
			  
	   echo '<div class="notice notice-success is-dismissible">';
	   echo '<p><strong>Import data successfully.</strong></p>';
	   echo '</div>';
			
		$CurrentDate = date('j-m-y-h-i');
		$CurrentDateSave = date('Y-m-d h:i');
		$newname = "product_date-".$CurrentDate.".".$ext; 
		$target = get_template_directory().'/csv/'.$newname;
		
		if (!file_exists(get_template_directory().'/csv/')) {
			mkdir(get_template_directory().'/csv/', 0777, true);
		}
		move_uploaded_file($_FILES['uploadfile']['tmp_name'],$target);
		
		add_option( 'last_product_import_file', $newname, '', 'yes' );
		add_option( 'last_product_import_time', $CurrentDateSave, '', 'yes' );

		}
		else{
			echo '<div class="notice notice-warning is-dismissible">';
			echo '<p><strong>Please upload csv file only.</strong></p>';
			echo '</div>';
		}
		
	} // Empty check
	else{
			echo '<div class="notice notice-warning is-dismissible">';
			echo '<p><strong>Please upload file.</strong></p>';
			echo '</div>';
		}
	}// upload action
}

Add a media image and featured image from a URL

When we import data than mostly need to dynamically add a featured image or custom post type from another domain than we need to add image in media with featured image.


// Call Function with value
Generate_Featured_Image('https://dummyimage.com/vga', 7);


function Generate_Featured_Image( $image_url, $post_id  ){
    $upload_dir = wp_upload_dir();
    $image_data = file_get_contents($image_url);
    $filename = basename($image_url);
    if(wp_mkdir_p($upload_dir['path']))     $file = $upload_dir['path'] . '/' . $filename;
    else                                    $file = $upload_dir['basedir'] . '/' . $filename;
    file_put_contents($file, $image_data);

    $wp_filetype = wp_check_filetype($filename, null );
    $attachment = array(
        'post_mime_type' => $wp_filetype['type'],
        'post_title' => sanitize_file_name($filename),
        'post_content' => '',
        'post_status' => 'inherit'
    );
    $attach_id = wp_insert_attachment( $attachment, $file, $post_id );
    require_once(ABSPATH . 'wp-admin/includes/image.php');
    $attach_data = wp_generate_attachment_metadata( $attach_id, $file );
    $res1= wp_update_attachment_metadata( $attach_id, $attach_data );
    $res2= set_post_thumbnail( $post_id, $attach_id );
}

WordPress search in custom post meta

Searching in custom post meta as like WooCommerce SKU.

add_filter( 'posts_where', 'codyfy_search_where' );
function codyfy_search_where( $where ){
    global $pagenow, $wpdb;
    $class_status = $_GET['s'] ? $_GET['s'] : ''; 
    if ($_GET['s'] != '') {
        $where = preg_replace(
       "/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
       "(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_key LIKE '_sku' AND ".$wpdb->postmeta.".meta_value LIKE $1) ", $where );
    }
	
    return $where;
}

add_filter('posts_join', 'codyfy_search_join' );
function codyfy_search_join ($join){
    global $pagenow, $wpdb;
    if ( $_GET['s'] != '') {    
        $join .='LEFT JOIN '.$wpdb->postmeta. ' ON '. $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id ';
    }
    return $join;
}

install dependencies or use composer at all in windows

For very Beginner Windows Users

  • Download the installer for windows from here
  • Check the installation by executing composer command at command prompt
  • Now, create the composer.json file at the same level where you have Vendor directory. (Not inside Vendor)
  • Move to the directory where you have composer.json through command prompt and run following command composer install
  • It shows the messages like ‘packages are downloaded’ and ‘autoload.php file created. (Check your /app/Vendor/ Directory)
  • now insert this code at the beginning of /app/config/core.php
  • require_once dirname(__DIR__) . '/Vendor/autoload.php';the above code will load all the classes automatically.

Reference