Поиск WordPress не работает с более чем двумя символамиPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Поиск WordPress не работает с более чем двумя символами

Сообщение Anonymous »

Я создал собственный шаблон для поиска наших продуктов с множеством фильтров и одним полем ввода для поиска по символам. Однако он работает только с одним или двумя символами, такими как «a», «ag», но не более чем с двумя символами. Если я ищу что-то вроде «pol» или «polar», он перенаправляет меня на WordPress 404 — СТРАНИЦА НЕ НАЙДЕНА.

Обновление:

Я попробовал два решения: одно с пользовательским запросом ajax, и оно отлично работает с поиском, но единственная проблема, с которой я столкнулся, — это нумерация страниц; другой использовал стандартный объект запроса WordPress, он хорошо работает с нумерацией страниц, но у меня возникла проблема с длиной символа поиска. Ниже приведены две попытки, которые я предпринял.

Попытка №1: с Ajax. этот код записан в файле function.php

function get_search_results()
{
global $wpdb;

if(!empty($_POST['search_input'])) {
$search_input = $_POST['search_input'];

$where = 'pm.meta_value LIKE '. "'%".$search_input."%'".' AND pm.meta_key LIKE "%pattern_number"';
$where1 = 'p.post_title LIKE '."'%".$search_input."%'".' AND p.post_type = "product"';

$search_sql = 'SELECT DISTINCT(pm.post_id), ph.lightness, ph.color_label FROM wp_posts p
INNER JOIN wp_products_huecolor ph on p.ID = ph.post_id
INNER JOIN wp_postmeta pm ON p.ID = pm.post_id
WHERE p.post_status = "publish" AND p.post_type = "product" AND (('.$where.') OR ('.$where1.')) ORDER BY ph.color_label, ph.lightness ASC';

$total_query = "SELECT COUNT(1) FROM (${search_sql}) AS combined_table";
$total = $wpdb->get_var( $total_query );
$items_per_page = 10;
$page = isset( $_GET['cpage'] ) ? abs( (int) $_GET['cpage'] ) : 1;
$offset = ( $page * $items_per_page ) - $items_per_page;
$page = $wpdb->get_results( $search_sql.' LIMIT '.$offset.', '.$items_per_page );

//echo "SQL = ".$wpdb->last_query; wp_die();
echo '
  • ';
    foreach ($page as $object)
    {
    // get custom fields values related to a post by post id
    $fields = get_fields($object->post_id);

    // get post details by post id
    $post_detail = get_post($object->post_id, $object );

    $brand_name = $fields[brand]->name;
    $full_sheet_image = $fields[full_sheet_image][sizes][thumbnail];
    $post_title = $post_detail->post_title;
    $post_name = $post_detail->post_name;

    ?>

  • [url=




    вот функции фильтра, написанные в function.php

    /*Replaced meta_key = with meta_key LIKE */
    add_filter( 'posts_where', function ( $where, \WP_Query $q )
    {
    // Check for our custom query var
    if ( true !== $q->get( 'wildcard_on_key' ) )
    return $where;

    // Lets filter the clause
    $where = str_replace( 'meta_key =', 'meta_key LIKE', $where );

    return $where;
    }, 10, 2 );

    function title_filter( $where, &$wp_query )
    {
    global $wpdb;
    if ( $search_term = $wp_query->get( 'search_prod_title' ) ) {
    $post_title_clause = '('.$wpdb->posts . '.post_title LIKE \'%' . esc_sql( like_escape( $search_term ) ) . '%\') OR';
    $where = substr_replace($where, $post_title_clause , 6, 0);
    }
    return $where;
    }

    function products_posts_select_filter( $fields, &$wp_query ){

    $fields = 'DISTINCT(wp_posts.ID), wp_posts.post_title, wp_posts.post_name, ph.lightness, ph.color_label';
    return $fields;

    }

    function products_posts_join_filter( $join, &$wp_query ){

    $join .= " INNER JOIN wp_products_huecolor ph on wp_posts.ID = ph.post_id";
    return $join ;

    }

    function products_posts_orderby( $orderby, &$wp_query ){

    $orderby = 'ph.color_label, ph.lightness ASC';
    return $orderby;

    }

    function products_posts_groupby( $groupby, &$wp_query ){

    return $groupby = '';

    }


    Подробнее здесь: https://stackoverflow.com/questions/457 ... characters
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»