Я не встречал еще ни одной темы для WordPress в которой стандартная форма поиска генерит корректный HTML код при втором ее добавлении на страницу, например в body для 404 ошибки.
Такой же проблемой страдают многие виджеты, которые корректно работают только с одной копией себя. И даже популярные скрипты и библиотеки PHP часто идут без «защиты от дурака».
Вся проблема в том, что горе-программисты жестко записывают id формы и элементов ввода прямо в HTML темплит! В результате при добавлении 2 и последующих копий, в пределах одной страницы появляются кучи элементов с одинаковыми айди!
Для WordPress приходиться каждый раз топать в редактор темы, и для файла Search Form (обычно «searchform.php») добавлять подобный код в начале:
<?php global $some_variable; if (isset($some_variable)) $some_variable += 1; else $some_variable = 0; $form_id = ''; if ($some_variable > 0) $form_id = $some_variable; ?>
Ну а потом фиксить HTML код самой формы, добавляя цифру порядкового номера формы в параметры id и name. Вот реальный пример с одного сайта:
<form role="search" method="get" id="searchform<?php echo $form_id ?>" class="searchform" action="<?php echo home_url( '/' ); ?>"> <input type="text" value="" name="s<?php echo $form_id ?>" id="s<?php echo $form_id ?>" /> <input type="submit" id="searchsubmit<?php echo $form_id ?>" value="<?php _e('Search','priimo'); ?>" /> </form>
Надеюсь что такой «фокус» будет полезен для продвинутых владельцев сайтов на WordPress.
Ну и не плохо чтобы такой подход стал стандартом для веб-программистов. Нельзя же думать только прямолинейно, если публичный код может применяться в разных системах непрогнозируемой сложности!
Повбывавбы…
Відома проблема, але невідоме її вирішення. ID має унікально ідентифікувати елемент. А віджети майже ніколи не розробляються для повторного використання в межах сторінки (це я як автор віджета кажу :). Відповідно, ускладнювати код віджета з міркування, що якось десь хтось може його покласти двічі, маловиправдано. І малоймовірно для аматорських опенсорсних поробок.
НравитсяНравится
Ну да, конечно 🙂
Сайдбар всегда один! В хедер и футер виждеты не ставятся…
Лень это все, свой глобальный счетчик инстансов иметь или генерить уикальный ID каждый раз нифига не проблема!
НравитсяНравится
Технічно не проблема, але економічно невигідно.
НравитсяНравится
На да, писать код без багов — это разрушает экономику 🙂
НравитсяНравится
Звичайно — тоді ніхто не буде апгрейдитись, та й вартість розробки *набагато* збільшується.
НравитсяНравится