Приветствую!
Несколько дней пытаюсь составить запрос на вывод постов, но отсутствуют базовые знания.
Имеется функция осуществляющая автоматическое определение названия города посетителя (название города, если необходимо для работы функции можно вывести в шапке с помощью шорткода ['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
}
Возможно на платной основе
Андрей CS сказал(а)
чтобы осуществлять выборку публикаций по значению произвольного поля, надо в значении хранить наименование города.
Спасибо что отозвались.
Название города выведено с помощью шорткода в значении произвольного поля и уже в нем храниться. У меня не получается задать условие сравнения этого значения с переменной $city и в соответствии с этим сравнением осуществить вывод.
gora0870 сказал(а)
Название города выведено с помощью шорткода в значении произвольного поля и уже в нем храниться
Тут поподробнее. Ранее вы заявили
gora0870 сказал(а)
значения произвольного поля в существующих постах 'value' => ['shortcode_name']
как я понял, в значении произвольного поля публикации храниться шорткод, а не название города
Да оно выводится с помощью шорткода автоматически при публикации поста, но хранится в виде текста (например 'Саратов'). Далее, когда какой нибудь пользователь входит на сайт, переменная $city определяет его город и цель, чтобы при этом сравнить эти значения и показать посты при которых value равна $city. Если для сравнения необходимо чтобы Название города определенное $city было визуально выведено это можно осуществить например в heder с помощью того же шорткода
в таком виде значение хранится
а таким образом, оно выводится в 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); } }
Андрей 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);
осуществлен вывод только одного последнего поста, а не всех и сложно понять, сработал ли фильтр.
gora0870 сказал(а)
Может ли быть проблемой то обстоятельство, что я пытаюсь осуществить такой вывод в архивах?
я давно не работал с данной функцией, насколько помню, функция вносит изменения в текущий цикл вывода публикаций, поэтому при выборке могут действовать другие параметры действующего цикла, например, выборка по таксономии.
Проверьте работу вашего кода на странице архива публикаций /task/ там параметры таксономии не действуют.
Андрей CS сказал(а)
gora0870 сказал(а)
Может ли быть проблемой то обстоятельство, что я пытаюсь осуществить такой вывод в архивах?
я давно не работал с данной функцией, насколько помню, функция вносит изменения в текущий цикл вывода публикаций, поэтому при выборке могут действовать другие параметры действующего цикла, например, выборка по таксономии.
Проверьте работу вашего кода на странице архива публикаций /task/ там параметры таксономии не действуют.
Не совсем вас понял. Разве архив публикаций /task/ это не обычная страница архива? Для архива публикаций /task/ необходимо создать свою страницу архива?
В описании к task указан адрес
интересное поведение, если я в значении произвольного поля указываю не переменную, а конкретное значение 'Саратов'
$args = array( 'post_type' => 'task', 'numberposts' => -1, 'meta_query' => array( array( 'key' => 'gorod', 'value' => 'Саратов' ) ) ); query_posts($args);
Осуществляется вывод бесконечного кол-во ПОСЛЕДНЕГО поста содержащего значение 'Саратов'
Перепробовал разные варианты и функции,
проверил код и дописал условием
'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 или 'Саратов') фильтрация не зависит. Есть интуитивное предположение, что для страницы архива нужен другой запрос на фильтрацию.
Щас голова треснет))