WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

[РЕШЕНО] Поиск с фильтром «ТОЛЬКО ИЗБРАННОЕ»

пользуюсь плагином "wp favorite post"
Плагин создает в базе данных для каждого пользователь новую таблицу wpfp_favorites с ID избранных постов. На отдельной странице создается\отображается список этих постов.

Вопрос: как сделать форму поиска с фильтром поиска по избранному пользователя (искать только среди избранного)?

Буду благодарен любым советам, так как тема для меня сырая, даже не предстовляю как делать, единсnвенное знаю что как обычно фильтрация будет влиять на значения в URL b всего (так видел на других сайтах "&filter=search_fav" )


решение в pre_get_posts и post__in

    function search_exact_match($query) {   
		if ($query->is_search && isset( $_GET['in-fav'] )   ) {
			$query->set( 'post__in', array(63798,17137,101565)  ); 
		}

	}
	add_action('pre_get_posts', 'search_exact_match' );

проблема в конфликтах плагинов - если не работает ищите кто влияет на поиск - у меня конфликт "relevanssi" и "simply exclude"

Заметки к вопросу:
kolshix 8 мес назад

нашел как получить данные (ID) из таблицы в плагине , как это прикрутить к форме поиска

    $limit=10;

	global $wpdb;
	$query = "SELECT post_id, meta_value, post_status FROM $wpdb->postmeta";
	$query .= " LEFT JOIN $wpdb->posts ON post_id=$wpdb->posts.ID";
	$query .= " WHERE post_status='publish' AND meta_key='wpfp_favorites' AND meta_value > 0 ORDER BY ROUND(meta_value) DESC LIMIT 0, $limit";

	$results = $wpdb->get_results($query);
	// массив ID 
	$results_id_array = wp_list_pluck( $results, 'post_id' );

	// теперь создаю запрос new WP_Query() - с выборкой среди ID 
	$the_query = new WP_Query( array( 'post_type' => 'any', 'post__in' => $results_id_array ) );  

	// ЗАМЕТКА Вывести поиск 
	//Change your search query here to include the FAQ post type
	  $query_args = [
		'post_type'   => ['post'],
		's'           => strip_tags($_GET['s']),
		'post_status' => 'publish',
		'paged'       => $paged
		'post__in'    => array( 2, 5, 12, 14, 20 ) ) 
	  ];

  $post_query = new WP_Query($query_args);
	if($post_query->have_posts()) {

	}

Подскажите как дальше быть и в правильном ли направлении и как прикрутить к форме поиска

<form role="search" method="get" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
  <input type="hidden" name="action" value="fav_search">
  <input type="text" name="search-career" value="ИЩЕМ">
  <input type="submit" class="form-submit" value="Submit">
</form>

<?php
  if( isset( $_GET['fav_search'] ) ) {

  }
?>

или к любой другой , я даже понятия не имею что куда вставлять

0
kolshix
475
8 месяцев назад
  • 1
    Kama7144

    Попробуй параметр s для get_posts() или WP_Query и там же укажи параметр include (posts__in) в который передай ID фаворитных постов текущего пользователя, которые как я понял сохраняются в метаполе wpfp_favorites.

    Над кодом уже сам посиди, в принципе примеры есть в описании к функциям: get_posts(), WP_Query.

    Комментировать
  • 0

    Те ты предлагаешь кому то за тебя код написать? )

    Закажи у кого нибудь на том же кворке за 500р и попроси что бы тебе подписали код комментариями.

    Если хочешь сам, то вот тебе рекомендации:

    1. Изучи базово mysql запросы, далее найди примеры кода для поиска, поиграйся что бы понять как оно работает.
    2. Перепиши свой запрос на такой, что бы вместо статической фразы поиска, данные брались из твоей формы.

    Но будь аккуратнее, тк если не будешь фильтровать данные их этой формы то сайт смогут поломать.

    kolshix 8 мес назад

    про кворк - отличная идея - позже наверно так и сделаю - тем более что доступ к сайту не нужен - все можно на тестовом. Чето сразу не додумался

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация