Работа с переменными
-
Вопрос в текущей формулировке имеет лишь косвенное отношение к 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()
.
- Тема «Работа с переменными» закрыта для новых ответов.