Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- add_filter( 'posts_search', function( $search ) {
- if($search) $search.=" and post_type='product'";//where поиска
- return $search;
- });
- add_filter( 'posts_orderby', function( $orderby ) {//order by
- $orderby="(CASE WHEN wp_posts.post_title LIKE '%".get_search_query()."%' THEN 1 ELSE 99 END)";
- return $orderby;
- });
- get_search_query();//строка поиска
- add_action( 'pre_get_posts', function( $q ) {
- if( $q->is_main_query() && $q->is_search() )
- {
- $q->set( 'nopaging', true );
- add_filter( 'posts_request', function( $request ) {//sql запрос поиска
- $sql = 'YOUR EXTRA SQL QUERY';
- return "({$request}) UNION ({$sql}) ORDER BY post_status DESC";
- });
- }
- });
- where we use the no paging version to match your SQL query.
- /**
- * Add data to the native WordPress search
- *
- * @see http://wordpress.stackexchange.com/a/161949/26350
- */
- add_action( 'pre_get_posts', function( $q ) {
- if( $q->is_main_query() && $q->is_search() )
- {
- $q->set( 'nopaging', true );
- $c = new WPSE_Add_Search_Data;
- $c->init();
- }
- });
- /**
- * class WPSE_Add_Search_Data
- */
- class WPSE_Add_Search_Data
- {
- protected $search_where = '';
- public function init()
- {
- add_filter( 'posts_search', array( $this, 'posts_search' ) );
- add_filter( 'posts_fields', array( $this, 'posts_fields' ) );
- add_filter( 'posts_request', array( $this, 'posts_request' ) );
- add_filter( 'posts_orderby', '__return_null' );
- }
- public function posts_search( $search )
- {
- $this->search_where = $search;
- return $search;
- }
- public function posts_fields( $fields )
- {
- return 'ID, post_title, post_content, post_status';
- }
- public function posts_request( $request )
- {
- global $wpdb;
- $search_where = str_ireplace(
- array( $wpdb->posts . ".post_", "AND (password = '')" ),
- "",
- $this->search_where
- );
- // Fetch data from the external table.
- // The fields much match the fields from the main search query.
- $sql = "SELECT ID, title as post_title,
- content as post_content, status as post_status
- FROM {$wpdb->prefix}software_and_hardware_post
- WHERE 1=1 {$search_where} AND status=1";
- // Append the external data with custom order:
- return "({$request}) UNION ({$sql}) ORDER BY post_status DESC";
- }
- } // end class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement