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.

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

Повбывавбы…

Автор: KARPOLAN

I am KARPOLAN https://www.patreon.com/karpolan

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

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

    Нравится

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

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

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

      Нравится

Оставьте комментарий