Статьи

Преступления против WordPress: как стать настоящим придурком, если вы создаете темы и плагины для WordPress

Хотите развить чувство глубокого презрения к вашим коллегам веб-разработчикам и дизайнерам? Затем попробуйте управлять многосайтовой установкой WordPress, использующей SSL.

Кто-то может поверить, что экосистема WordPress — это настоящая Шангри-ла тем и плагинов. Я хочу разрушить эту иллюзию: это не так. Если вам приходилось управлять сайтом WordPress или двумя, вы поймете, что я имею в виду, когда говорю, что темы и плагины WordPress могут быть лабиринтом проблем совместимости и кучей плохих практик программирования; полный пустых обещаний. Эта статья — мой маленький вклад в улучшение мира. придать смысл моей жизни; и смягчая боль.

Это список преступлений против WordPress. Я нашел все эти сомнительные практики в темах и плагинах, которые превратили мою жизнь в настоящий ад.

Включая вашу собственную устаревшую версию jQuery

Я обнаружил это в теме:

$my_jquery = get_bloginfo('template_url'). "/js/jquery.old.version.js"; wp_deregister_script( 'jquery' ); wp_register_script( 'jquery', $my_jquery, false, '' ); wp_enqueue_script('jquery'); 

WordPress поставляется с включенным jQuery; пожалуйста, убедитесь, что ваш плагин или тема совместимы с jQuery-версией WordPress. Никогда не включайте jQuery в свой плагин или тему. Как вы думаете, что происходит, когда ваша версия jQuery на шаг или два отстает от версии, включенной в WordPress, ммм?

При добавлении кода, подобного приведенному выше, создается впечатление, что вы вторгаетесь в мое личное пространство. Если ваш код JavaScript требует jQuery, просто сделайте это:

 wp_enqueue_script('jquery'); 

Не редактируемый текст шаблона

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

Вот пример: если вы создаете тему и хотите показать подменю страницы в боковом столбце, избегайте жесткого кодирования его в свой шаблон; сделать это виджетом Разрешить владельцу сайта разместить его и добавить собственный заголовок. Владелец сайта может не любить заголовок «Sub Navigation» и предпочитать «В этом разделе». Почему вы предполагаете, что имеете право принимать все решения?

По крайней мере, предоставьте панель опций.

IE=EmulateIE7

Это просто жестоко; с таким же успехом вы можете начать бросать ржавые гвозди в мои глаза, потому что это было бы более забавно, чем выслеживание причины ошибок CSS, возникающих из-за этого:

 <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"> 

Я нашел это в теме, за которую я фактически заплатил. Если вы являетесь создателем тем и не можете заставить свой CSS работать в IE, если он не эмулирует IE7, вам нужно вернуться к чертежной доске. Серьезно плохая форма.

Добавление лишних тем

Тема WordPress — это презентация. Предоставление таких функций, как поддержка Google Analytics, не нужно и просто добавляет беспорядка на страницу параметров вашей темы, как коллега, который никогда не отключается.

Если я хочу использовать Analytics, я могу получить плагин для этого. Кроме того, что если я захочу использовать сервис статистики сайта, отличный от Google Analytics?

Не убирай за собой

Если владелец сайта хочет удалить ваш плагин или тему, не упускайте возможность сделать это; это их сайт, в конце концов. Оставлять все свои данные без дела — все равно что быть плохим арендатором, который ломает сустав, когда они уходят.

Авторы плагинов, убедитесь, что вы добавили действия для деактивации вашего плагина. Например:

 register_deactivation_hook(__FILE__,'my_plugin_deactivation'); function my_plugin_deactivation() { //get rid of stored data here } 

Это просто добавить, и вы можете прочитать все об этом в Кодексе WordPress .

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

Пренебрежение wp_footer в вашей теме

Если вы не собираетесь добавлять вызов wp_footer в свою тему, вы можете также украсть мою обувь. Это самое простое нет-нет — так много плагинов зависит от этого — и все же вы по-прежнему находите темы, даже коммерческие, которые не вызывают wp_footer .

Вам нужно разместить <?php wp_footer(); ?> <?php wp_footer(); ?> перед закрывающим </body> .

Здесь нет аргументов. Просто сделай это.

Выполнение инициализации внутри wp_head

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

 function my_init() { define('REALLY_IMPORTANT_CONSTANT', 'really_important_value'); } add_action('wp_head', 'my_init'); 

Проще говоря, действие wp_head должно использоваться только для вывода тегов в wp_head HTML. Если вы игнорируете это правило, вы связываете логику кода с выводом HTML, и это, как правило, плохо.

Перспективные пользовательские меню без использования пользовательских меню WordPress

Вы бы пообещали привезти фургон, чтобы помочь своему другу переехать, а затем включить мотоцикл? Итак, почему вы обещаете функцию пользовательских меню, но не используете функцию пользовательского меню WordPress? Недавно я заплатил за тему, в которой есть поле, в которое владелец сайта должен вводить список идентификаторов страниц через запятую:

Введите строку запроса страниц, которые вы хотите отобразить в главном меню (верхний левый угол страницы). Пример: include = 9,10,20,21,32 (это отобразит 5 пунктов меню для страниц с идентификатором 9,10,20,21,32).

Если вы предлагаете пользовательские меню в своей теме, определите позиции меню и разрешите владельцу сайта использовать средство создания пользовательских меню WordPress; доступно в WordPress 3.0. это гибкий и простой в использовании для владельца сайта; и код для добавления пользовательских слотов меню в вашу тему очень прост. Кодекс имеет весь код, который вам нужен.

Миниатюры без использования сообщений Миниатюры

Вот отличный способ приговорить владельца сайта к жизни каторжных работ. Начиная с версии 2.9 в WordPress появилась функция миниатюр сообщений, но вы по-прежнему найдете темы и плагины, которые заставляют владельцев сайтов вручную вставлять URL-адреса изображений в настраиваемые поля сообщений.

Вместо этого создайте несколько нестандартных размеров изображения, а затем используйте функцию миниатюр Post. Это превращает тяжелый труд в опцию «поставь и забудь»:

 add_theme_support( 'post-thumbnails'); if ( function_exists( 'add_image_size' ) ) { add_image_size( 'frontpage-news-thumb', 75, 45, true ); add_image_size( 'frontpage-news-large', 570, 300, true ); add_image_size( 'portfolio-page-thumb', 44, 30, true ); } 

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

В вашей теме или плагине вы можете вывести соответствующий тег изображения с the_post_thumbnail функции the_post_thumbnail :

 <?php the_post_thumbnail( 'frontpage-news-thumb' ); ?> 

Прочитайте все об этом в Кодексе . Пожалуйста.

Вставка пользовательских почтовых ящиков без использования add_meta_box

Функция add_meta_box была доступна с WordPress 2.5, но я все еще вижу следующее:

 add_action('edit_page_form', custom_write_panel); function custom_write_panel() { //echo lots of form HTML } 

Пример функции custom_write_panel приведенной выше, custom_write_panel HTML в форму редактирования сообщения. Это равносильно тому, что тебя бросит в урну твой лучший друг, хранящий прах своей матери.

Функция add_meta_box добавляет вашу пользовательскую панель записи в глобальный массив $wp_meta_boxes . Оказавшись там, он может быть доступен, переопределен — обычно управляется другим кодом или плагином. Это вежливый способ сделать это.

Прочтите ссылку на функцию в Кодексе для получения подробной информации и ссылок на простые учебные пособия.

Неспособность поддерживать HTTPS

Если вы запускаете сайт WordPress по протоколу HTTPS, постоянные предупреждения о безопасности смешанного содержимого в браузере практически неизбежны, что требует изменения плагинов и тем вручную. Это связано с тем, что многие авторы тем и плагинов жестко кодируют http, когда они включают ресурсы страницы, такие как файлы JavaScript и изображения. Такое чувство, что его обманывают, чтобы купить новый костюм и понять, что покрыта только передняя часть манекена. И теперь ваш зад трясется от ветра, пока вы произносите свою большую речь перед акционерами.

Начиная с версии 2.6 WordPress имеет функцию is_ssl :

 $scheme = ( is_ssl() ? 'https' : 'http' ); 

Просто используйте его, пока кто-нибудь не пострадал.

За исключением жесткого кодирования, бывают случаи, когда вы не можете винить создателей плагинов и тем. Ведь многие из них имеют простой скопированный код из самого WordPress. В WordPress 3.0.4, default-constants.php , строка 77, мы находим:

 if ( !defined('WP_CONTENT_URL') ) define( 'WP_CONTENT_URL', get_option('siteurl') . '/wp-content'); 

Использование get_option('siteurl') просто извлекает значение из базы данных без какой-либо проверки SSL. Лучший способ — использовать функции site_url / get_site_url поскольку они выполняют соответствующую проверку.

В качестве альтернативы вы можете сделать то, что я сделал, и исправить это самостоятельно:

 function fix_ssl_siteurl($url) { if ( 0 === strpos($url, 'http') && is_ssl() ) $url = str_replace( 'http://', 'https://', $url ); return $url; } add_filter('option_siteurl', 'fix_ssl_siteurl'); add_filter('option_home', 'fix_ssl_siteurl'); add_filter('option_url', 'fix_ssl_siteurl'); add_filter('option_wpurl', 'fix_ssl_siteurl'); add_filter('option_stylesheet_url', 'fix_ssl_siteurl'); add_filter('option_template_url', 'fix_ssl_siteurl'); 

Вы можете поместить приведенный выше код в плагин, в файл functions.php в теме или, если вы запускаете многосайтовую установку, поместить его в папку mu-plugins и покончить с этим. Конечно, было бы лучше, если бы все просто поддерживали HTTPS должным образом.

Не поддерживает мульти-сайт WordPress

Если вы заявляете, что поддерживаете WordPress 3.0 и выше, то вы должны поддерживать установку WordPress на несколько сайтов. Если вам не удастся сделать это, вы чмо. С моей точки зрения, это все равно что выиграть семейную поездку в Sea World, но выяснить, что только одному из нас разрешено плавать с дельфинами.

Включение нескольких сайтов при установке WordPress изменяет путь загрузки файла, URL-адрес формы администратора и имена таблиц базы данных уникальны для каждого блога. Также плагины могут быть активированы для всей сети. Написание этой темы может заполнить весь учебник. Но вот несколько указателей:

В многосайтовой установке WordPress путь к файлу содержимого зависит от перенаправления URL-адреса. Часто создатели тем или плагинов включают вспомогательную библиотеку, например, библиотеку манипуляций с изображениями. Если это так с вашей темой или плагином, убедитесь, что ваша библиотека работает с перенаправлением URL. Многие из них терпят неудачу в этом.

Один плагин, который я использовал, написал действие формы параметров следующим образом:

 <form method="post" action="<?php echo $_SERVER['PHP_SELF'] . '?page=' . basename(__FILE__); ?>&updated=true"> 

Проблема заключается в том, что в $_SERVER['PHP_SELF'] WordPress путь к формам администратора различен для каждого блога и не равен $_SERVER['PHP_SELF'] . Вот исправление, которое я использовал для этого плагина; это в основном меняет действие с корневого пути на простой относительный путь:

 <form method="post" action="<?php echo 'options-general.php?page=' . basename(__FILE__); ?>&updated=true"> 

Если вашей теме или плагину нужны пользовательские таблицы базы данных, не забывайте, что при установке на нескольких сайтах каждый сайт имеет уникальный префикс имени таблицы. В основном это означает использование глобального объекта $wpdb для доступа к базе данных и $wpdb->prefix . Все это объясняется в Кодексе и в этом посте .

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

Подведение итогов и успокоение

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

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