Хотите развить чувство глубокого презрения к вашим коллегам веб-разработчикам и дизайнерам? Затем попробуйте управлять многосайтовой установкой 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 не работает должным образом.