Работа с переменными
-
Вопрос в текущей формулировке имеет лишь косвенное отношение к WP 🙂 Точность ответа зависит от формата списка значений и типа переменной.
Что именно вы хотите сделать?Создать форму выпадающего списка, что бы в выпадающем списке были значения дополнительного поля (см. мою предыдущую тему «Метаданные»)
Так, первая часть вроде ясна
<?php
$mykey_values = get_post_custom_values(‘my_key’);
foreach ( $mykey_values as $key => $value )
?>а что дает
foreach ( $mykey_values as $key => $value )
?
Цикл с перебором значений. Для выпадающего списка нужно что-то такое:
<select name="mykey_values"> <?php $mykey_values = get_post_custom_values('my_key'); ?> <?php foreach ( $mykey_values as $key => $value ) : ?> <option value="<?php echo $key; ?>"><?php echo $value; ?></option> <?php endforeach; ?> </select>спасибо, попробую.
Но предконечной целью у меня является:
чтобы значения отбразились в поле выпадающего списка в форме<form method=»post» id=»order»>
Выбрать:
<select name=»select» onchange=’this.form.submit()’ style=»width:200px»>
<option value=»title»<?=ЗДЕСЬ ЗНАЧЕНИЯ ПОЛЕЙ</option>
</select>
</form>Т.е. из цикла набор значений должен попасть в форму.
А самой конечной целью — чтобы через квэри пост были выбраны записи выбранного значения метаданных!Сергей, не могли бы Вы дать ссылочку, что бы досконально разобраться в этих функциях. То что Вы дали нужно доработать, а толку пока не хватает.
Когда добавил код себе получил форму в виде выпадающего списка, это то, что нужно, но в форме отсутствуют значения, это значит что у меня что-то некорректно указано, вот мои текущие мысли:
<select name="mykey_values">— это произвольное название переменной!?
<?php $mykey_values = get_post_custom_values('my_key'); ?>переменной присваивается значение из дополнительного поля с имененем my_key
<?php foreach ( $mykey_values as $key => $value ) : ?>идет перебор значений данного поля, т.е. присваиваются по очереди значения value поля my_key
<option value="<?php echo $key; ?>"><?php echo $value; ?></option>это как раз выпадающий список с этими значениями
<?php endforeach; ?>все
</select>Правильная логика?
Да, верно. Объединить можно примерно так:
<form method="post" id="order"> Выбрать: <select name="select" onchange='this.form.submit()' style="width:200px"> <?php $mykey_values = get_post_custom_values('my_key'); ?> <?php foreach ( $mykey_values as $key => $value ) : ?> <option value="<?php echo $key; ?>"><?php echo $value; ?></option> <?php endforeach; ?> </select> </form>Функция здесь только одна — уже известная
get_post_custom_values().Что-то пока не получается. Форма создана, но в выпадающем списке значения по-прежнему не появляются. Уточните пожалуйста еще раз:
<select name="select" onchange='this.form.submit()' style="width:200px">— стандартный HTML код формы
<?php $mykey_values = get_post_custom_values('my_key'); ?>— определена переменнаяmykey_values. Ей присваивается значение из поляmy_key
<?php foreach ( $mykey_values as $key => $value ) : ?>— Здесь не понял, тольк предполагаю, что идет перебор значений. Вот это до конца не понятно$key => $value
дальше понятноИ еще вопросик, как через
query_posts
выбрать посты по переменной$mykey_valuesПровел эксперимент, вставил запись внутрь цикла, теперь стали отображаться значения, но применительно только к текущей рубрике, причем форма повторяются энное кол-во раз, так как в цикле кружится.
Т.е. функция работает, только как заставить ее робить снаружи цикла?может нужно другую функцию использовать?
Оказалось, что
get_post_custom_values()действительно работает только для текущей записи внутри цикла. Можно переписать так:<?php // Имя произвольного поля $custom_key = 'my_key'; // Вызов query_posts() по выбранному значению if ( !empty($_POST['select']) ) { $selected_meta_value = _wp_specialchars(($_POST['select'])); query_posts("$query_string&meta_key=$custom_key&meta_value=$selected_meta_value"); } // Выбор всех значений поля global $wpdb; $mykey_entries = $wpdb->get_results("SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = '$custom_key'"); ?> <?php if ( !empty($mykey_entries) ) : ?> <form method="post" id="order"> Выбрать: <select name="select" onchange='this.form.submit()' style="width:200px"> <?php foreach ( $mykey_entries as $mykey_entry ) : ?> <?php $selected = !strcasecmp($mykey_entry->meta_value, $selected_meta_value) ? ' selected="selected"' : ''; ?> <option value="<?php echo $mykey_entry->meta_value; ?>"<?php echo $selected; ?>><?php echo $mykey_entry->meta_value; ?></option> <?php endforeach; ?> </select> </form> <?php endif; ?>Все работает, теперь буду через query_posts выводить посты по выбранному значению
Хм, не получается.
Делаю так<?php query_posts("cat=190&meta_value=$mykey_entry"); ?>Ничего не выводит. Я правильно понимаю, что
$mykey_entryэто и есть выбранное значение в списке?Выбранное значение передаётся в массиве
$_POST. В коде уже есть пример вызоваquery_posts().
Тема «Работа с переменными» закрыта для новых ответов.