WordPress, PHP и ошибки в HTML коде

Я не встречал еще ни одной темы для 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.

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

Повбывавбы…

WordPress, PHP и ошибки в HTML коде: 5 комментариев

  1. Відома проблема, але невідоме її вирішення. ID має унікально ідентифікувати елемент. А віджети майже ніколи не розробляються для повторного використання в межах сторінки (це я як автор віджета кажу :). Відповідно, ускладнювати код віджета з міркування, що якось десь хтось може його покласти двічі, маловиправдано. І малоймовірно для аматорських опенсорсних поробок.

    Нравится

    1. Ну да, конечно 🙂

      Сайдбар всегда один! В хедер и футер виждеты не ставятся…

      Лень это все, свой глобальный счетчик инстансов иметь или генерить уикальный ID каждый раз нифига не проблема!

      Нравится

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s