20ответ(ов) в теме
gora0870
не в сети 4 года
На сайте с 31.07.2014
Участник
Тем 86
Сообщения 383
1
09:55

Приветствую!
Несколько дней пытаюсь составить запрос на вывод постов, но отсутствуют базовые знания.

Имеется функция осуществляющая автоматическое определение названия города посетителя (название города, если необходимо для работы функции можно вывести в шапке с помощью шорткода ['shortcode_name'])

$userInfo = geoip_detect2_get_info_from_current_ip();
$city = $userInfo->city->name;

Имеется произвольное поле со следующими значениями
key = 'grod', value = ['shortcode_name'] - // Срабатыват шорткод принадлежащий ($userInfo) и осуществляющий вывод названия города в значении произвольного поля

Пожалуйста помогите составить функцию фильтра вывода постов с eчетом сравнения значения произвольного поля в существующих постах 'value' => ['shortcode_name'] и переменной $ity

Мне необходимо следующие:
Если город посетителя определен
if ($city) {
//посетителю выводятся все посты (пользовательского типа) со значением 'value'== $city
}

Возможно на платной основе

Вы не можете просматривать опубликованные ссылки
0
Андрей CS
не в сети 4 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16854
2
10:33

чтобы осуществлять выборку публикаций по значению произвольного поля, надо в значении хранить наименование города.

0
gora0870
не в сети 4 года
На сайте с 31.07.2014
Участник
Тем 86
Сообщения 383
3
10:56

Андрей CS сказал(а)

чтобы осуществлять выборку публикаций по значению произвольного поля, надо в значении хранить наименование города.

Спасибо что отозвались.
Название города выведено с помощью шорткода в значении произвольного поля и уже в нем храниться. У меня не получается задать условие сравнения этого значения с переменной $city и в соответствии с этим сравнением осуществить вывод.

0
Андрей CS
не в сети 4 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16854
4
10:59

gora0870 сказал(а)
Название города выведено с помощью шорткода в значении произвольного поля и уже в нем храниться

Тут поподробнее. Ранее вы заявили

gora0870 сказал(а)
значения произвольного поля в существующих постах 'value' => ['shortcode_name']

как я понял, в значении произвольного поля публикации храниться шорткод, а не название города

0
gora0870
не в сети 4 года
На сайте с 31.07.2014
Участник
Тем 86
Сообщения 383
5
11:15

Да оно выводится с помощью шорткода автоматически при публикации поста, но хранится в виде текста (например 'Саратов'). Далее, когда какой нибудь пользователь входит на сайт, переменная $city определяет его город и цель, чтобы при этом сравнить эти значения и показать посты при которых value равна $city. Если для сравнения необходимо чтобы Название города определенное $city было визуально выведено это можно осуществить например в heder с помощью того же шорткода

0
Андрей CS
не в сети 4 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16854
6
11:39

вносите изменения в цикл вывода через функцию query_posts на основании значения города текущего пользователя
как то так:

$args = array(
	'meta_query' => array(
		array(
			'key' => 'city',
			'value' => $city
		)
	)
);
query_posts($args);

1
gora0870
не в сети 4 года
На сайте с 31.07.2014
Участник
Тем 86
Сообщения 383
7
11:45

в таком виде значение хранится

Вы не можете просматривать опубликованные ссылки

а таким образом, оно выводится в value

add_shortcode('gorod', 'shortcode_gorod');
function shortcode_field($atts){
 extract(shortcode_atts(array(
 'post_id' => NULL,
 ), $atts));
 if(!isset($atts[0])) return;
 $field = esc_attr($atts[0]);
 global $post;
 $post_id = (NULL === $post_id) ? $post->ID : $post_id;
 return get_post_meta($post_id, $field, true);
}
	
	if(!wp_is_post_revision($post_ID)) {
add_post_meta($post_ID, 'gorod',  do_shortcode('[geoip_detect2 property="city"]'), true);
	}
	  
}

0
Андрей CS
не в сети 4 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16854
8
11:49

я вам написал функцию фильтрации постов на основании значения города текущего пользователя, что не так?

0
gora0870
не в сети 4 года
На сайте с 31.07.2014
Участник
Тем 86
Сообщения 383
9
11:54

Андрей CS сказал(а)

вносите изменения в цикл вывода через функцию query_posts на основании значения города текущего пользователя
как то так:

$args = array(
	'meta_query' => array(
		array(
			'key' => 'city',
			'value' => $city
		)
	)
);
query_posts($args);

попробовал так

$args = array(
		'post_type' => 'task',
		'numberposts' => -1,
	    'meta_query' => array(
		array(
			'key' => 'gorod',
			'value' => $city
		)
	)
);
query_posts($args);

осуществлен вывод только одного последнего поста, а не всех и сложно понять, сработал ли фильтр.

0
Андрей CS
не в сети 4 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16854
10
12:03

с вашим кодом должны вывестись все задания с произвольным полем 'gorod' со значением $city, больше тут добавить нечего, это стандартный функционал ВП.

1
gora0870
не в сети 4 года
На сайте с 31.07.2014
Участник
Тем 86
Сообщения 383
11
12:05

Может ли быть проблемой то обстоятельство, что я пытаюсь осуществить такой вывод в архивах?

0
Андрей CS
не в сети 4 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16854
12
12:09

gora0870 сказал(а)

Может ли быть проблемой то обстоятельство, что я пытаюсь осуществить такой вывод в архивах?

я давно не работал с данной функцией, насколько помню, функция вносит изменения в текущий цикл вывода публикаций, поэтому при выборке могут действовать другие параметры действующего цикла, например, выборка по таксономии.
Проверьте работу вашего кода на странице архива публикаций /task/ там параметры таксономии не действуют.

0
gora0870
не в сети 4 года
На сайте с 31.07.2014
Участник
Тем 86
Сообщения 383
13
12:22

Андрей CS сказал(а)

gora0870 сказал(а)

Может ли быть проблемой то обстоятельство, что я пытаюсь осуществить такой вывод в архивах?

я давно не работал с данной функцией, насколько помню, функция вносит изменения в текущий цикл вывода публикаций, поэтому при выборке могут действовать другие параметры действующего цикла, например, выборка по таксономии.
Проверьте работу вашего кода на странице архива публикаций /task/ там параметры таксономии не действуют.

Не совсем вас понял. Разве архив публикаций /task/ это не обычная страница архива? Для архива публикаций /task/ необходимо создать свою страницу архива?
В описании к task указан адрес

Вы не можете просматривать опубликованные ссылки
0
Андрей CS
не в сети 4 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16854
14
12:33

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

0
gora0870
не в сети 4 года
На сайте с 31.07.2014
Участник
Тем 86
Сообщения 383
15
12:44

На архивной странице записей и пробую.
Пока не получается.
В любом случае большое спасибо за помощь, я по крайней мере понял в каком направлении идти.

0
gora0870
не в сети 4 года
На сайте с 31.07.2014
Участник
Тем 86
Сообщения 383
16
13:15

интересное поведение, если я в значении произвольного поля указываю не переменную, а конкретное значение 'Саратов'

$args = array(
		'post_type' => 'task',
		'numberposts' => -1,
	    'meta_query' => array(
		array(
			'key' => 'gorod',
			'value' => 'Саратов'
		)
	)
);
query_posts($args);

Осуществляется вывод бесконечного кол-во ПОСЛЕДНЕГО поста содержащего значение 'Саратов'

0
Андрей CS
не в сети 4 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16854
17
13:20

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

1
gora0870
не в сети 4 года
На сайте с 31.07.2014
Участник
Тем 86
Сообщения 383
18
18:43

Перепробовал разные варианты и функции,
проверил код и дописал условием
'posts_per_archive_page' => 5

$args = array(
		'relation' => 'AND',
		'type' => 'task',
		'posts_per_archive_page' => 5,
		'meta_query' => array(
		array(
			'key' => 'gorod',
			'value' => 'Саратов',

		)
	)
);
query_posts($args);

с get_post, get_posts или new WP_Query, вообще выводит все посты. От значения value ($city или 'Саратов') фильтрация не зависит. Есть интуитивное предположение, что для страницы архива нужен другой запрос на фильтрацию.
Щас голова треснет))

0
gora0870
не в сети 4 года
На сайте с 31.07.2014
Участник
Тем 86
Сообщения 383
19
22:35

Проблемы нашел и устранил
1. Не учел, что на странице моего архива несколько циклов,
2 . Вместо 'post_type' => 'task', указывал 'type' => 'task',
3. добавил 'compare' => '='

Андрей, огромная благодарность за помощь. Без нее, ковырялся бы еще месяц.

0
gora0870
не в сети 4 года
На сайте с 31.07.2014
Участник
Тем 86
Сообщения 383
20
10:35

Столкнулся с еще одной проблемой, если использовать query_posts($args ),

Вопрос перенес в форум поддержки Freelance WP-Recall

0
Вы не имеете права на публикацию сообщений в этой теме