Форма поиска пользовательских полей, PHP, Wordpress - PullRequest
0 голосов
/ 25 февраля 2020

Я создал форму, которая получает значения и выполняет поиск в настраиваемых полях и показывает сообщения, которые имеют значения этих настраиваемых полей, код HTML:

<form method="get" action="http://mywebsite.com/search">
    <input type="text" name="Color" placeholder="Color">
    <select name="Size">
        <option>All</option>
        <option>Small</option>
        <option>Medium</option>
        <option>Large</option>
        <option>Extra Large</option>
    </select>
    <input type="submit" value="submit"></button>
</form>

И PHP код на странице результатов (спасибо одному из программистов на этом сайте):

Поиск настраиваемого поля в Wordpress

if ((isset($_GET['color']) && !empty($_GET['color'])) && (isset($_GET['size']) && 
!empty($_GET['size']))) {
// filter the result and remove any spaces
  $color = trim(filter_input(INPUT_GET, 'color', FILTER_SANITIZE_STRING));
  $size  = trim(filter_input(INPUT_GET, 'size', FILTER_SANITIZE_STRING));

// Create the arguments for the get_posts function
  $args = [
  'posts_per_page' => -1, // or how many you need
  'post_type'      => 'YOUR_POST_TYPE', // if the post type is 'post' you don't need this line
  'post_status'    => 'publish', // get only the published posts
  'meta_query' => [ // now we are using multiple meta querys, you can use as many as you want
      'relation' => 'AND', // Optional, defaults to "AND" (taken from the wordpress codex)
      [
        'key'   => 'color',
        'value'   => $color,
        'compare' => '='
      ],
      [
        'key'     => 'size',
        'value'   => $size,
        'compare' => '='
      ]
    ]
  ];

  $posts = get_posts($args);
  $query = new WP_Query($args);
}

if (!empty($posts)) {
  while ($query->have_posts()) {
    $query->the_post();
    //the post codes
  }
}

Но есть проблема, все работает хорошо, если заполнены оба поля «input» и «select», а URL будет выглядеть следующим образом:

mywebsite.com / search /? Color = red & Size = Small

Но если один из они не были заполнены, например:

mywebsite.com / search /? Color = red & Size =

Тогда посты не будут отображаться на странице результатов, даже если для этого установлен «цвет» сообщение будет "красным", мне нужен этот URL, показывает сообщение с "color" = "red" и "Size" = "any value".

что мне делать?

PS : Извините, если в моем вопросе есть грамматическая ошибка, я немного знаю Engli sh.

1 Ответ

0 голосов
/ 25 февраля 2020

Я сделал нечто подобное с 4 полями ввода. Вот мой код, и вы сможете адаптировать его под свой код:

/* Set the first item in array */
        $filter = array("relation' => 'AND'");

        /* Only add to filter array if a value is passed */
        if ($cat_slug != FALSE) {
            $filter[] = $args[0];
        }   
        if ($age_slug != FALSE) {
            $filter[] = $args[1];
        }   
        if ($region_slug != FALSE) {
            $filter[] = $args[2];
        }   
        if ($tag_slug != FALSE) {
            $filter[] = $args[3];
        }   
        /* var_dump ($filter); */

        $temp_post = $post; // Storing the object temp
        $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
        $wp_query = new WP_Query(
            array(
                'post_type'  => 'resource_db',
                'posts_per_page' => 10,
                'paged'      => $paged,
                's'          => $s_term, 
                'tax_query'  => array ($filter)
            ));
...