Помогите решить проблему

Народ, помогите, пожалуйста справиться с такой задачей: в этот код нужно дописать условие, позволяющее выбрать больше одного пункта в выпадающем списке.

<?php wp_dropdown_pages(array('selected' => get_theme_mod('pagelist'), 'name' => $settings.'[pagelist]', 'orderby' => 'Name' , 'hierarchical' => 1, 'hide_empty' => '0' )); ?>

У меня что то никак не получается.

Найти в файле wp-includes/post-template.php строку (примерно 716-я):

$output = "<select name=\"$name\" id=\"$name\">\n";

и переписать ее вот так:

$output = "<select  multiple=\"true\" name=\"$name\" id=\"$name\">\n";

Догадываетесь, что после обновления движка, эти изменения будут потеряны? 🙂

Ну или хак писать…

Лучше хак. Править каждый раз файлы wordpress – это не дело.

Help Desk, можете помочь с этим хаком?

Т.к. не известно какую задачу Вы решаете «множественным выбором», то оценить объективно трудозатраты на написание хака не получается. Поэтому помочь могу только советом.

Если у Вас есть много различных тем, то поищите в них такие файлы functions.php, sidebar.php или header.php, в которых используется свой (альтернативный) вывод страниц. И адаптируйте их для своих нужд. Обычно имена этих ф-ций содержат строки «get_pages» или «list_pages», к которым приписаны некоторые приставки или суффиксы. Например «my_get_pages» или «wp_list_pages2», …

Вот, нашла.

function wp_revamp_pages() {
        $pages = wp_list_pages('depth=4&title_li=&exclude=1&hide_empty=0&echo=0');  
        $pages = preg_replace('/title=\"(.*?)\"/','',$pages);  
        echo $pages;
    }

Только, как в него добавить условие, позволяющее выбрать несколько пунктов в выпадающем списке я не знаю.
Нужно, чтобы можно было просто выбрать несколько пунктов, но чтобы по ним нельзя было перейти на эти страницы – только выбрать.

Я делаю админку в теме и там нужен выпадающий список страниц – чтобы можно было выбрать, какие страницы не отображать на сайте.

Help Desk, помогите, пожалуйста.

В приведенном Вами коде используется стандартная WP ф-ция wp_list_pages, т.е. дорабатывать его можно только путем правки движка. Но зато Ваш вариант натолкнул на мысль, которая вчера в голову не пришла: php функция preg_replace — выполняет поиск и замену по регулярному выражению. Возможно, что такой вариант будет работать быстрее, т.е. будет более предпочтительным.

Я с «регулярными выражениями» дружу слабо, но вечером покопаюсь в книжках — может будет там чего, похожего.

Что касается Вашей задачи: если, честно, то ничего не понял.
1. Насколько мне известно, то, в выпадающем списке невозможно выбрать одновременно несколько пунктов;
2. «Нужно, чтобы можно было просто выбрать несколько пунктов, но чтобы по ним нельзя было перейти на эти страницы – только выбрать» — вообще непонятно: зачем совершать какие-то действия, если потом ничего не делать?
3. Если хотите сделать возможность выбора исключаемых страниц, то может «чекбоксы» Вам больше подойдут? (это такие квадратики, в которых можно «птички» ставить 🙂 )
4. WordPress Navigation List Plugin NAVT — смотрели? ИМХО, просто безграничные возможности управления/создания/организации/группировки меню. Может Вам подойдет.
5. Exclude Pages — по-проще вариант. Просто исключает указанные пункты из меню.

«Нужно, чтобы можно было просто выбрать несколько пунктов, но чтобы по ним нельзя было перейти на эти страницы - только выбрать» — вообще непонятно: зачем совершать какие-то действия, если потом ничего не делать?

Help Desk, я делаю админку в теме и там нужен выпадающий список страниц – пользователь выберет, какие страницы не отображать на сайте, дальше нажмет кнопку "Сохранить" и выбранные страницы перестанут отображаться на сайте.

Насколько мне известно, то, в выпадающем списке невозможно выбрать одновременно несколько пунктов;

MULTIPLE – дает возможность выбора нескольких пунктов меню при удержании клавиши Ctrl, хотя по умолчанию можно выбрать только один пункт меню.

Пример:
<FORM ACTION="receive.cgi">
<SELECT NAME="OS" MULTIPLE>
<OPTION VALUE="DOS">MS-DOS
<OPTION VALUE="WinXP">MS Windows98
<OPTION VALUE="Unix" SELECTED>UNIX
<OPTION VALUE="WinNT">MS Windows NT
</SELECT>
<INPUT TYPE="submit" VALUE="Послать">
</FORM>

Если хотите сделать возможность выбора исключаемых страниц, то может «чекбоксы» Вам больше подойдут? (это такие квадратики, в которых можно «птички» ставить

Help Desk, конечно использовать чекбоксы для моей задачи было бы предпочтительнее, только я не знаю как заставить wordpress выводить чекбоксами список страниц.

я не знаю как заставить wordpress выводить чекбоксами список страниц

Вот Вам пища для размышлений:
1. Поиск и замена preg_replace — 1;
2. Поиск и замена preg_replace — 2;
3. Альтернативная штатной wp_list_pagesmaxsite_get_page (я предлагал Вам поискать нечто подобное в существующих темах)

делаю админку в теме и там нужен выпадающий список страниц - пользователь выберет, какие страницы не отображать на сайте, дальше нажмет кнопку "Сохранить" и выбранные страницы перестанут отображаться на сайте

Плагин «Exclude Pages» делает тоже самое, но только в редакторе страниц. Автору просто достаточно сбросить чекбокс, если не надо, чтобы страница отображалась на сайте.

MULTIPLE - дает возможность выбора нескольких пунктов меню

Не знал, что такую форму называют «выпадающим списком» 😀

Help Desk, спасибо за ссылки – все посмотрела.
К сожалению, это не совсем то, что мне нужно.

У меня задача намного проще. Этот код:

         
<?php wp_dropdown_pages(array('selected' => get_theme_mod('pagelist'), 'name' => $settings.'[pagelist]', 'orderby' => 'Name' , 'hierarchical' => 1, 'hide_empty' => '0' )); ?>

формирует выпадающий список страниц:

<p>Выберите из списка страницы, которые вы хотите исключить из вывода.</p>

<select name="mods_My_Blog[pagelist]" id="mods_My_Blog[pagelist]">
<option class="level-0" value="70">Карта блога</option>
<option class="level-0" value="1088">Контакты</option>
<option class="level-0" value="2">Обо мне</option>
<option class="level-0" value="1216">О компании</option>
</select>

Мне нужно вставить в приведенный выше код аргумент MULTIPLE, чтобы список выглядел так:

<select MULTIPLE name="mods_My_Blog[pagelist]" id="mods_My_Blog[pagelist]">
<option class="level-0" value="70">Карта блога</option>
<option class="level-0" value="1088">Контакты</option>
<option class="level-0" value="2">Обо мне</option>
<option class="level-0" value="1216">О компании</option>
</select>

Но у меня это никак не получается, все время выдает ошибку.

<?php $my_pages = wp_dropdown_pages(array('selected' => get_theme_mod('pagelist'), 'name' => $settings.'[pagelist]', 'orderby' => 'Name' , 'hierarchical' => 1, 'hide_empty' => '0', 'echo' => 0 )); 
$my_pages = str_replace('<select', '<select MULTIPLE', $my_pages);
echo $my_pages;
?>

Проблема решена

Anonymous
Отправить
Ответ на: