Поддержка Поиск специалистов Работа с переменными

Просмотр 14 ответов — с 16 по 29 (всего 29)
  • что-то не работает. Убрал у себя

    <?php
    
           query_posts("cat=190");
    
     ?>

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

    // Вызов 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");
    }

    вниз так как посчитал что логично сначала выбрать а потом применять функцию запроса
    в итоге получил на странице это
    // Вызов 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"); }
    что-то не хватает:
    вот мой исходный код, при котором сейчас есть выпадающий список, в котором отображаются метаданные и отображаются посты из рубрики 190:

    <?php
    // Имя произвольного поля
    $custom_key = 'reg';
    
    // Вызов 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; ?>
    
    <?php
    
           query_posts("cat=190");
    
     ?>
    
    <br /><br />

    подскажите пожалуйста что здесь не так

    Модератор Yuri

    (@yube)

    что-то не хватает:

    Боюсь, что не хватает понимания логики работы движка. query_posts() выбирает посты из базы по указанным критериям, Loop — выводит их.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Второй query_posts() отменяет действие первого. Выполняться должен один:

    <?php
    // Имя произвольного поля
    $custom_key = 'reg';
    // Идентификатор рубрики
    $cat_id = 190;
    
    // Вызов query_posts() по выбранному полю
    if ( !empty($_POST['select']) ) {
    	$selected_meta_value = _wp_specialchars(($_POST['select']));
    	query_posts("cat=$cat_id&meta_key=$custom_key&meta_value=$selected_meta_value");
    } else {
    	query_posts("cat=$cat_id");
    }
    
    // Выбор всех значений поля
    global $wpdb;
    $mykey_entries = $wpdb->get_results("SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = '$custom_key'");
    ?>
    <?php if ( !empty($mykey_entries) ) : ?>
    <?php $mykey_entries = array_intersect_key($mykey_entries, array_unique(array_map('serialize', $mykey_entries))); ?>
    <form method="post" id="order">
    Выбрать:
    <select name="select" onchange='this.form.submit()' style="width:200px">
    <option value="0">Все</option>
    <?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; ?>
    
    <br /><br />

    Ну дак цикл то у меня ниже есть, я его просто не показал в коде, так как он рабочий

    Почему цикл рабочий не указан для истории? или он огромный? желательно полные самописные листинги указывать, а то получается проблему решишь и гуляй «вася», чтоб доступно и понятно было всем. Если кто не в курсе ранее созданные свои посты можно править.

    Сергей вот как выглядит страничка http://os.pkrai.ru/katalog-predpriyatij-autsorserov/

    Смотрите:
    1. Выбор по полю все таки не производится, идет ошибка.
    Т.е. что-то в коде нужно добавлять или менять.
    2. В список попадают все значения, в т.ч. повторяющиеся. А как сделать чтобы отражались только уникальные значения?

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Исправил предыдущий фрагмент.
    1. Оказывается, не было необходимости в $query_string.
    2. Добавлена фильтрация повторяющихся значений.
    3. Идентификатор рубрики сделан параметром.

    Сергей!!!Спасибо!!!
    Я про памятник уже говорил?
    Все работает!!!
    Все кто интересовался фильтрами на странице — вот готовый код.

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

    Сергей, еще вопрос, а как сделать 2 фильтра: по разным полям.
    Я тупо скопировал код ниже и заменил имя переменной, у меня появилось две формы, но работает только нижняя.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    1. Добавил вариант «Все» (сразу после <select>).
    2. Со второй формой сложнее, надо подумать. Сложность в том, что query_posts() не поддерживает выбор по нескольким полям. Нужен прямой запрос или отдельный цикл для каждого поля. Полей всего два?

    Хм… и все скромно молчат о цене вопроса.
    Так оно и бывает, когда альтруизм встречается с жадностью.
    А вот интересно, сколько человеко-часов оставлено в этой теме?

    Переношу тему в раздел «Специалисты». Это я намекаю кагбэ 🙂

    Хотелось бы спросить(Ю.Б. я выспался поверь мне)вот там Сергей приводил верху код , о его работе здесь речь не идет но хотелось бы знать:
    вот например кусок кода Сергея
    global $wpdb;
    $mykey_entries = $wpdb->get_results(«SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = ‘$custom_key'»);

    я же хочу прописать так
    global $wpdbmax;
    $mykey_entries = $wpdbmax->get_results(«SELECT meta_value FROM $wpdbmax->postmeta WHERE meta_key = ‘$custom_key'»);
    сразу хочу пояснить, что в файле wp-db все подправил(как мог конечно)
    $wpdbmax = new wpdbmax(DB_USER, DB_PASSWORD, DB_NAME1, DB_HOST); в конфиге соответственно прописал define(‘DB_NAME1’, ‘база2’); конечно же значение в конфиге осталось define(‘DB_NAME’, ‘база1’);
    Вот $wpdbmax использует одного и того же пользователя, пароль, хост что и $wpdb, разница только в таблице, возможно ли что бы она читала с этой таблице, я поставил, много мучился над ошибками, но вроде сейчас нигде ошибки не выдает, файлы движка подправлены, но вот с этой таблицы база2 не читает, то же самое и с фуyкцией get-post и get-id (не буду расписывать тоже изменены мною и теперь существуют и разрешены get-postmax и get-idmax)Но что то не получается, не знаю может я не на верном пути, может действительно на пару дней бросить комп и поспать, как советовал Ю.Б. если что ткни меня где почитать, в русском кодексе не все переведены функции, а в английском запарился переводить.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Не нужно править файлы движка. Практически для всего предусмотрены фильтры и действия. Если хотите задать свой вопрос — создайте, пожалуйста, отдельную тему.

    Сергей, только сейчас вернулся, спасибо за добавленный выбор по критерию «все»! Все работает.

    Полей всего два?

    Да 2 поля, еще поле «napravl» аналогично уже сделанному «reg»

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