Просмотр 15 ответов — с 1 по 15 (всего 29)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Вопрос в текущей формулировке имеет лишь косвенное отношение к WP 🙂 Точность ответа зависит от формата списка значений и типа переменной.
    Что именно вы хотите сделать?

    Создать форму выпадающего списка, что бы в выпадающем списке были значения дополнительного поля (см. мою предыдущую тему «Метаданные»)

    Так, первая часть вроде ясна

    <?php
    $mykey_values = get_post_custom_values(‘my_key’);
    foreach ( $mykey_values as $key => $value )
    ?>

    а что дает

    foreach ( $mykey_values as $key => $value )

    ?

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Цикл с перебором значений. Для выпадающего списка нужно что-то такое:

    <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>

    Правильная логика?

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Да, верно. Объединить можно примерно так:

    <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

    Провел эксперимент, вставил запись внутрь цикла, теперь стали отображаться значения, но применительно только к текущей рубрике, причем форма повторяются энное кол-во раз, так как в цикле кружится.
    Т.е. функция работает, только как заставить ее робить снаружи цикла?

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

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Оказалось, что 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 это и есть выбранное значение в списке?

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Выбранное значение передаётся в массиве $_POST. В коде уже есть пример вызова query_posts().

Просмотр 15 ответов — с 1 по 15 (всего 29)
  • Тема «Работа с переменными» закрыта для новых ответов.