В этой записи будут складироваться WordPress заметки, которые могут помочь в решении тех или иных вопросов, проблем или нюансов. Запись будет дополняться.
Содержание
Разработка
Как создать свой WordPress плагин
Часто рекомендуют добавлять в файл functions.php какой-либо код, чтобы поправить что-то в WordPress, например убрать не нужные head-заголовки. Но это не совсем правильно.
В файл functions.php стоит добавлять только тот код, который касается изменений только в определенном шаблоне. Если вы хотите чтобы этот код работал даже тогда, когда решите установить другой шаблон - создавайте свой плагин. Тогда не придется копировать код из одного шаблона в другой.
Создать плагин очень легко:
- Создаем в папке wp-content/plugins файл, например, с таким именем: elims-plugin.php
- В самом файле пишем что-то вроде:
<?php /** * Plugin Name: elimS Плагин */ //Ниже пишем тот код, который должен работать независимо от того, какой шаблон используется
Теперь переходим в админ-панели wordpress к установленным плагинам и там мы увидим плагин с именем "elims Плагин" (на моем примере), активируем его.
полезные ресурсы для разработки
- wppluginchecker.earthpeople.se - при помощи этого сервиса можно попытаться определить какие плагины используются на wordpress сайте. Сервис не идеален - определяет далеко не все плагины.
- wpsec.ru - онлайн сервис указывающий уязвимости на wordpress-сайте
- codex.wordpress.org - официальная и очень подробная документация разработчиков WordPress.
- codex.wordpress.org/Theme_Unit_Test - XML-файл с демо-данными для импорта в WordPress, в котором множество постов, страниц, изображений различных типов для тестирования шаблона или чего-либо еще.
- adambrown.info/p/wp_hooks - список хуков для WordPress
- WP Gear — ресурс полезных инструментов для разработчиков при работе с WordPress. Большую коллекция полезных и интересных ссылок для разработчиков:
- Фреймворки PHP
- Инструменты и шаблоны для тем
- Инструменты отладки
- Мета поля
- Underscores —пустая стартовая тема. Содержит множество полезных файлов для темы, код JavaScript и CSS, которые можно использовать в качестве основы для своей новой темы. Тема создана командой в Automattic: всегда будет использовать самые лучшие и современные техники.
полезные плагины для разработки
- Monster Widget - поможет в тестировании областей виджетов: загружает все 13 дефолтных виджетов в боковую панель, не требуя установки. Это позволит быстро проверить настройки стилей для виджетов и изменить их по мере необходимости.
- Debug This — отображает информацию о странице из веб консоли. Можно проверить данные из WordPress/PHP/Server. Вам не нужно писать сложные модульные тесты, с этим плагином вы сможете все проверить прямо из свой панели администратора.
- Developer plugin - полезный инструмент, для улучшения ваших тем и плагинов, проверяет, есть ли у вас все необходимые инструменты, темы, плагины и, в случае отрицательного результата, предлагает свои варианты.
- Плагин Theme Check —позволит проверить вашу тему и убедиться, что она соответствует требованиям. Проверит весь ваш код и уведомит вас о каких-либо требованиях, которые вы, возможно, пропустили.
Обновления
Автоматическая установка обновлений
Чтобы включить включить автоматическое обновление минорных (второстепенных) и мажорных (главных) версий wordpress в файле wp-config.php пропишите:
define('WP_AUTO_UPDATE_CORE', true);
Это же, можно включить через прописывание кода в файле functions.php (но лучше прописать в своем плагине):
- add_filter( 'auto_update_core', '__return_true' ); - включаем минорные и мажорные обновления WordPress
- add_filter( 'allow_minor_auto_core_updates', '__return_true' ); - только минорные
- add_filter( 'allow_major_auto_core_updates', '__return_true' ); - только мажорные
- add_filter( 'auto_update_plugin', '__return_true' ); - автоматическое обновление всех плагинов
- add_filter( 'auto_update_theme', '__return_true' ); - автоматическое обновление всех тем, используйте с аккуратностью, так как темы часто дорабатываются и редактируются, то ее обновление может стереть ваши доработки.
Автоматическое обновление определенных плагинов:
function auto_update_specific_plugins ( $update, $item ) { // Array of plugin slugs to always auto-update $plugins = array ( 'akismet', 'buddypress', ); if ( in_array( $item->slug, $plugins ) ) { return true; // Always update plugins in this array } else { return $update; // Else, use the normal API response to decide whether to update or not } } add_filter( 'auto_update_plugin', 'auto_update_specific_plugins', 10, 2 );
Отключить автообновление WordPress
Добавьте в файл wp-config.php строку:
define('AUTOMATIC_UPDATER_DISABLED', true );
Отключить обновление какого-либо плагина
Если вы установили какой-то плагин и не хотите потом обновлять плагин до более новых версий, то можно скрыть напоминание о том что вышла новая версия для этого плагина.
Можно это сделать разными способами:
Установка WordPress плагина "Block Plugin Update" - самый легкий способ.
Редактирование версии плагина
Редактируем php-файл плагина: в строке где прописана версия плагина указываем заведомо большую версию.
На примере плагина "NextGEN Gallery by Photocrati" версии 2.0.66: в файле /wp-content/plugins/nextgen-gallery/nggallery.php находим строку "* Version: 2.0.66" и вместо версии "2.0.66" пишем версию "102.0.66". Теперь уведомление о обновлении плагина не будут появляться до тех пор, пока выпуститься версия больше прописанной.
Добавление кода в файл functions.php (или же в файл своего плагина)
Пример кода, в котором отключаем обновления для плагинов akismet и Google XML Sitemaps:
//отключение напоминаний об обновлении плагина start function disable_plugin_updates($value) { unset($value->response['google-sitemap-generator/sitemap.php']); unset($value->response['akismet/akismet.php']); return $value; } add_filter('site_transient_update_plugins', 'disable_plugin_updates'); //отключение напоминаний об обновлении плагина end
Оптимизация
Таблица wp_options: оптимизация автозагрузки опций в ОЗУ
В таблице wp_options хранятся настройки wordpress, плагинов, шаблонов и т.д. В этой таблице есть поле "autoload", которое сообщает что данные опции должны подгружаться в память автоматически при загрузке ядра WordPress. Делается этого для того, чтобы wordpress каждый раз не обращался к базе данных для часто запрашиваемых опций.
Проблема в том, что по умолчанию все опции в поле "autoload" имеют статус "yes", если разработчик плагина\шаблона не указал обратное. Если разработчик криворукий, то в определенной опции может хранится большой объем не критичных данных, которые будут постоянно загружаться в ОЗУ, тем самым ее забивая.
Также, чаще всего, опции удаленных плагинов и шаблонов не удаляются из таблицы wp_options.
Поэтому если Вы заметили что WordPress стал потреблять слишком много ОЗУ, то рекомендуется проверить сколько места в оперативной памяти занимают автозагружаемые опции и выявить наиболее прожорливые из них. Это можно сделать при помощи вот такого запроса:
SELECT option_name, LENGTH(option_value) AS length FROM wp_options WHERE autoload = 'yes' ORDER BY length DESC LIMIT 100;
Столбец Length упорядочен от большего к меньшему и отобразит сколько байт памяти занимает та или иная опция.
При выявлении прожорливых опций остается лишь выяснить что это за опция, можно ли отключить ее автозагрузку в ОЗУ или вообще удалить из базы данных.
Редирект со страниц с media на родительскую страницу - пост
function myprefix_redirect_attachment_page() { if ( is_attachment() ) { global $post; if ( $post && $post->post_parent ) { wp_redirect( esc_url( get_permalink( $post->post_parent ) ), 301 ); exit; } else { wp_redirect( esc_url( home_url( '/' ) ), 301 ); exit; } } } add_action( 'template_redirect', 'myprefix_redirect_attachment_page' );
Либо можно настроить в плагине SEO YOAST: Advanced - Permalinks - Redirect attachment URLs to parent post URL.
Переносим объявление всех js-скриптов в футер
Для оптимизации скорости загрузки страницы часто рекомендуют перенести объявление js-скриптов в футер, это можно сделать при помощи следующего кода:
function footer_enqueue_scripts(){ remove_action('wp_head','wp_print_scripts'); remove_action('wp_head','wp_print_head_scripts',9); remove_action('wp_head','wp_enqueue_scripts',1); add_action('wp_footer','wp_print_scripts',5); add_action('wp_footer','wp_enqueue_scripts',5); add_action('wp_footer','wp_print_head_scripts',5); }
Советы чистке и оптимизации worpress
- Удалите не используемые плагины и темы
- Скройте не используемые шорткоды - такие могут остаться в тексте записей если раньше использовался плагин с шорткодом, плагин удалили, а шорткоды из текста не удалили. Плагин Hide Unwanted Shortcodes может помочь в этом - он скроет указанные шорткоды.
- Удаляйте ревизии постов, страниц - WordPress автоматически сохраняет предыдущие версии постов, страниц. Они накапливаются в базе данных. В этом помогут такие плагины как WP-Optimize
- Удаление не одобренных и спамных комментариев - порой их может набираться большое количество, куда больше чем полезных одобренных комментариев. Не забывайте очищать базу данных. Помогут в этом два плагина из предыдущего пункта
- Удаление не используемых тегов - если вдруг на вашем сайте есть теги, которые не прикреплены ни к одной записи\странице, то их следует удалить. Если их много, то тут поможет плагин Mass Delete Unused Tags. Я бы вообще не рекомендую использовать те теги, которые будут привязаны лишь к нескольким записям и никому не нужны. Не нужные страницы на сайте ухудшают SEO показатели.
- Удаление неиспользуемых изображений - это поможет очистить фтп от лишних файлов, которые добавляют дополнительный вес к резервным копиям. В этом может помочь плагин Image Cleanup - он найдет не используемые изображения и удалит. Можно файлы не удалить, а переместить в указанную папку.
- Очистка HTML-кода - я встречал случаи когда человек в текстовом редакторе tinymce advanced изменял шрифт и размер текста. В результате это выливалось в кучу лишнего html-кода, которого было больше чем самого текста. Это увеличивает вес страницы. Тоже самое может происходить если копипастить текст из word-документа или еще откуда-либо. Следите за чистотой html-кода.
- Очистка header-блока - wordpress любит в header'е прописывать кучу лишней информации, такой как версия wordpress, короткие ссылки на страницы, rss-сылки на комментарии к страницы и много чего еще. Плагин WP Head Cleanup поможет убрать эту информацию из header, либо это можно сделать при помощи своего кода.
- Очистка от битых ссылок - если ваш сайт старый, то скорее всего у него есть достаточное количество ссылок, как внутренних так и внешних, которые ведут на не существующие страницы. Такие ссылки лучше удалять и исправлять, чтобы они не портили ваши SEO-показатели. В этом может помочь программка Xenu или плагин Broken Link Checker.
- Очистка и оптимизация базы данных - если вы достаточно хорошо знаете структуру wordpress, то при помощи плагина WP DBManager можно очищать таблицы которые не нужны и остались после удаленных плагинов, также можно настроить периодическую оптимизацию таблиц, с этим может помочь и Вышеупомянытый плагин WP-Optimize. Delete Expired Transients - очистка таблицы wp_options от устаревших настроек (удаленных плагинов и т.п.)
SEO оптимизация
Добавить target="_blank" ко всем ссылкам
Следующий код добавит ко всем ссылкам target="_blank", благодаря чему ссылка будет открываться в новой вкладке
function autoblank($text) {
$return = str_replace('<a', '<a target="_blank"', $text);
return $return;
}
add_filter('the_content', 'autoblank');
Правда тут нужно учесть что этот код добавится ко всем ссылкам и внутренним и внешним. Лучше добавлять target="_blank" только ко внешним ссылкам, а для этого понадобиться немного подкорректировать код выше. Если не хочется возиться с кодом, то рекомендую использовать плагин WP External Links (nofollow new tab seo).
Добавить теги Noindex в страницы архивов, поиска, пагинации, 404
В этом нам поможет следующий код:
/*Start: Add noindex to low value pages*/ function add_noindex_tags(){ # Get page number for paginated archives. $paged = intval( get_query_var( 'paged' ) ); # Add noindex tag to all archive, search and 404 pages. if( is_archive() || is_search() || is_404() ) echo '<meta name="robots" content="noindex,follow">'; # Add noindex tag to homepage paginated pages. if(( is_home() || is_front_page() ) && $paged >= 2 ) echo '<meta name="robots" content="noindex,follow">'; } add_action('wp_head','add_noindex_tags', 4 ); /*End: Add noindex to low value pages*/
Как убрать якорь "more" из ссылок с анонсов
Убрать якорь more из ссылок, ведущих с анонсов на полную версию записи, можно добавив следующий код в файл functions.php (или в файл своего плагина):
//start: удаляем якори в ссылках more function remove_more_link_scroll( $link ) { $link = preg_replace( '|#more-[0-9]+|', '', $link ); return $link; } add_filter( 'the_content_more_link', 'remove_more_link_scroll' ); //end: удаляем якори в ссылках more
Убираем поле url в форме комментирования
function remove_comment_fields($fields) { unset($fields['url']); return $fields; } add_filter('comment_form_default_fields', 'remove_comment_fields');
Ограничить длину комментария
В файл functions.php добавить код:
add_filter( 'preprocess_comment', 'wpb_preprocess_comment' ); function wpb_preprocess_comment($comment) { if ( strlen( $comment['comment_content'] ) > 5000 ) { wp_die('Comment is too long. Please keep your comment under 5000 characters.'); } if ( strlen( $comment['comment_content'] ) < 60 ) { wp_die('Comment is too short. Please use at least 60 characters.'); } return $comment; }
Таким образом можно ограничить минимальную длину комментария в 60 символов, а максимальную в 5000 символов.
Очистка html-кода меню от стилей
В плане SEO не совсем хорошо, когда у Вас соотношение исходного кода страницы к тексту страницы более чем 10 к 1. В таких случаях нужно подчищать в исходном коде лишнее.
Если у Вас большое двухуровневое меню, то вы скорее всего увидите что каждый пункт меню обладает своими стилями. Чтобы это все убрать поможет вот такое код:
# start: удаляем стили из пунктов меню add_filter('nav_menu_css_class', 'my_css_attributes_filter', 100, 1); add_filter('nav_menu_item_id', 'my_css_attributes_filter', 100, 1); add_filter('page_css_class', 'my_css_attributes_filter', 100, 1); function my_css_attributes_filter($var) { #удаляем стили из пунктов меню, за исключением стиля main-nav и menu-item-has-children return is_array($var) ? array_intersect($var, array('main-nav','menu-item-has-children')) : ''; } # end: удаляем стили из пунктов меню
Отключение функционала
Отключить Emoji
//start:отключение Emoji remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); //на сайте remove_action( 'wp_print_styles', 'print_emoji_styles' ); //на сайте remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); //в админке remove_action( 'admin_print_styles', 'print_emoji_styles' ); //в админке //end:отключение Emoji
Отключить json
Когда мне понадобилось отключить json, то помогла вот эта функция:
function remove_json_api () { remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );// Remove the REST API lines from the HTML Header remove_action( 'wp_head', 'wp_oembed_add_discovery_links', 10 );// Remove the REST API lines from the HTML Header remove_action( 'rest_api_init', 'wp_oembed_register_route' );// Remove the REST API endpoint. add_filter( 'embed_oembed_discover', '__return_false' );// Turn off oEmbed auto discovery. remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );// Don't filter oEmbed results. remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );// Remove oEmbed discovery links. remove_action( 'wp_head', 'wp_oembed_add_host_js' ); // Remove oEmbed-specific JavaScript from the front-end and back-end. add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );// Remove all embeds rewrite rules. } add_action( 'after_setup_theme', 'remove_json_api' );
Еще там же рядышком я нашел вот эту функцию (что она делает не разбирался):
function disable_json_api () {
// Filters for WP-API version 1.x
add_filter('json_enabled', '__return_false');
add_filter('json_jsonp_enabled', '__return_false');
// Filters for WP-API version 2.x
add_filter('rest_enabled', '__return_false');
add_filter('rest_jsonp_enabled', '__return_false');
}
add_action( 'after_setup_theme', 'disable_json_api' );
И на другом сайте нашел вот этот, код, который в том случае мне не помог, но на всякий случай упомяну:
add_filter('json_enabled', '__return_false'); add_filter('json_jsonp_enabled', '__return_false');
Решение проблем
Импорт в WordPress из большого xml файла
На одном большом сайте я столкнулся с тем что не мог импортировать контент через стандартный инструмент импорта WordPress из xml файла размером 80 мегабайт. В админке wordpress было указано что максимальный размер xml-файла не должен превышать 12 мегабайт.
Выручила меня программа WXR Splitter, которую разбивает xml-файл на несколько более мелких файлов указанного размера
Как увеличить WordPress Memory Limit
Бывает можно встретить вот такую ошибку:
Fatal error: Allowed memory size of 41943040 bytes exhausted (tried to allocate 72 bytes) in
Она говорит о том, что CMS не хватает выделенной под нее оперативной памяти.
Есть три способа увеличения объема выделяемой памяти. Сработают они или нет, зависит от того, как хостинг настроил сервер.
- Через файл wp-config.php, пишем в нем:
define('WP_MEMORY_LIMIT', '96M');
- Через файл .htaccess, пишем в нем:
php_value memory_limit 64M
- Через файл php.ini, находим в ней строку с этим параметром:
memory_limit = 64M ; Maximum amount of memory a script may consume (64MB)
Если ни один способ не помог, то обращайтесь к техподдержке хостинга
WordPress и "Превышен лимит загрузок"
Если в wordpress, в режиме мультисайта, при попытке загрузить медиафайл (например при добавлении изображения или миниатюры к записи) вы увидели сообщение:
Превышен лимит загрузок
Извините, вы заполнили всё пространство для файлов
То эта проблема решается следующим образом: переходите на страницу "Мои сайты" - "Управление сетью" - "Консоль" - "Настройки" - "Параметры сети", на странице находите заголовок "Настройки загрузки" и возле надписи "Место для файлов" снимаете галочку с "Ограничить суммарный размер загруженных файлов" или увеличиваете цифру суммарного размера загруженных файлов.
Отключить запрос FTP логина и пароля при установке тем/плагинов
Если при попытке установить тему или плагин из админки wordpress выскакивает сообщение с запросом данных для доступа к FTP:
Connection Information
To perform the requested action, WordPress needs to access to your web server. Please enter your FTP credentials to proceed. If you do not remember your credentials, you should contact your web host.
Hostname
FTP Username
FTP Password
Connection Type
Connection Type FTP FTPS (SSL)
То пропишите в файле wp-config.php следующие две строки:
define('FS_METHOD', 'ftpext'); define('FTP_BASE', '/home/путь-к-папке/'); #для установки плагинов и тем define('FTP_USER', 'фтп_логин' ); define('FTP_PASS', 'фтп_пароль' ); define('FTP_HOST', 'хост'); define('FTP_SSL', false); #для установки плагинов и тем
Поиск должен работать не только по постам, но и страницам
function filter_search($query) { if ($query->is_search) {$query->set('post_type', array('post', 'page'));}; return $query; }; add_filter('pre_get_posts', 'filter_search');
Активация пользователя
Бывает при создании нового пользователя не приходит письмо на почту, с ссылкой, но активировать все равно нужно/хочется.
Если вы создаете нового пользователя, то письмо должно выглядеть приблизительно вот так:
Hi,
You've been invited to join 'Site Name' at
https://elims.org.ua/sub_site_slug with the role of Subscriber.
If you do not want to join this site please ignore
this email. This invitation will expire in a few days.Please click the following link to activate your user account:
https://elims.org.ua/sub_site_slug/wp-activate.php?key= 6f0aaff8be7990be
Если письмо не пришло, ищем по примеру:
select * from wp_prefix_signups where active = 0
В столбце activation_key нужного аккаунта, будет искомый ключ, для ссылки с активацией.
Если вы приглашаете на подсайт уже созданного пользователя в wordpress multisite, то письмо должно выглядеть примерно вот так:
Hi,
You've been invited to join 'sub site name' at https://elims.org.ua/%sub_site_slug% with the role of %role%.
Please click the following link to confirm the invite: https://elims.org.ua/%sub_site_slug%/newbloguser/EunQrOp9EAwyIwrsjmHu/
Если письмо не пришло, то исходя из примера нам в базе нужно найти код: EunQrOp9EAwyIwrsjmHu
В таблице wp_%prefix%_%sub_site_id%_options нужного сайта\подсайта ищите
select * from wp_example_3_options where option_name like "%new_user%"
в ответ в столбце option_name увидите значение
new_user_EunQrOp9EAwyIwrsjmHu
А значит ссылка с подтверждением инвайта будет выглядеть вот так: https://elims.org.ua/sub_site_slug/newbloguser/EunQrOp9EAwyIwrsjmHu/ - осталось лишь по ней пройти
Если таких записей несколько, то пользователя можно отличить по почте в столбце option_value -
a:3:{s:7:"user_id";i:11;s:5:"email";s:14:"mail@mail.com";s:4:"role";s:10:"subscriber";}
Как обойти ограничение в 90 пунктов меню
В WordPress можно столкнуться с ограничением, которое не даст в меню добавить более 90 пунктов. Для того чтобы увеличить это лимит, необходимо отредактировать на хостинге файл php.ini - файл конфигурации PHP. Файл в большинстве случаев редактируется в админ-панели хостинга.
Нужно увеличить значение параметра max_input_vars: отвечает за количество входных переменных которое может быть принято в одном запросе. На моем хостинге значение по умолчанию 1000, я увеличил до 2000 и проблема решилась.
Jetpack: ошибка -32601 в Публикаторе (JetPack Publicize Error -32601)
В google можно найти много методов решения этой ошибки и именно это меня насторожило. Потому я пошел своим методом и он решил мою проблему - я отключил в файле wp-config.php принудительное включение https-протокола для админки wordpress: удалил из этого файла строку
define('FORCE_SSL_ADMIN', true);
Как я понял ошибка связана с тем, что из админ-панели я обращаюсь с https версии сайта, но при этом на моем сайте "основной протокол" (пока-что) - http.
Правда через некоторое время снова столкнулся с этой проблемой и вышеописанное решение уже не помогало, зато помог следующий совет:
В файл wp-config.php добавить строку, если используете http протокол:
$_SERVER['SERVER_PORT'] = 80;
или, если используете https протокол:
$_SERVER['SERVER_PORT'] = 443;
Ошибка disable_embeds_rewrites
Полный текст ошибки:
call_user_func_array() expects parameter 1 to be a valid callback, function 'disable_embeds_rewrites' not found or invalid function name in //wp-includes/plugin.php on line 235
Ошибка скорее всего связана с тем, что где-то в плагинах или шаблоне (скорее всего в файле functions.php) есть код:
// Remove all embeds rewrite rules.
add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );
Его нужно закомментировать, то есть сделать вот так:
// Remove all embeds rewrite rules.
// add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );
Остальные WordPress заметки
Как разрешить регистрацию в WordPress?
Все просто: в админке WordPress перейти Настройки - Общие и поставить галочку возле "Членство Любой может зарегистрироваться". Там же рядом можно указать какая роль будет присваиваться для зарегистрировавшегося пользователя.
Работа с миниатюрами
Включить поддержку миниатюр в теме
Добавьте следующий код в файл functions.php вашей темы:
<?php add_theme_support( 'post-thumbnails' ); ?>
Отображение миниатюр записей в вашей теме
<?php if (has_post_thumbnail()) {the_post_thumbnail();} ?>
Функция wp_get_attachment_image_src($attachment_id, $size, $icon)
возвращает массив в котором элементы значат следующее:
- [0] - url
- [1] - ширина
- [2] - высота
- [3] - размер вложений изображения (или иконка, отображающая вложение)
Пример:
$imgsrc = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID, '' ), 'thumbnail' ); $imgsrc[0] //url-миниатюры
Скрипт BFIThumb - github.com/bfintal/bfi_thumb
Расширяет WP_Image_Editor и добавляет больше возможностей. Используется более гибкое изменение изображений — только по ширине или по высоте (сохранение пропорций), либо и ширина и высота сразу. Это особенно удобно для разметки наподобие Pinterest (Masonry), вы можете уменьшать изображение с сохранением пропорций.
Пример использования:
// Resize by width only, the height will adjust to the correct ratio $params = array( 'width' => 400 ); $image = bfi_thumb( 'URL-to-image.jpg', $params ); // Resize by height only, the width will adjust to the correct ratio $params = array( 'height' => 300 ); $image = bfi_thumb( 'URL-to-image.jpg', $params ); // Resize by width and height and crop $params = array( 'width' => 400, 'height' => 300, 'crop' => true ); $image = bfi_thumb( 'URL-to-image.jpg', $params ); // Print out our img tag echo "<img alt="" src="$image" />";
Вывод последних измененных записей
Сначала добавляем код в файл functions.php (или в файл своего плагина):
function wpb_lastupdated_posts() { // Query Arguments $lastupdated_args = array( 'orderby' => 'modified', 'ignore_sticky_posts' => '1' ); //Loop to display 5 recently updated posts $lastupdated_loop = new WP_Query( $lastupdated_args ); $counter = 1; echo '<ul>'; while( $lastupdated_loop->have_posts() && $counter < 5 ) : $lastupdated_loop->the_post(); echo '<li><a href="' . get_permalink( $lastupdated_loop->post->ID ) . '"> ' .get_the_title( $lastupdated_loop->post->ID ) . '</a> ( '. get_the_modified_date() .') </li>'; $counter++; endwhile; echo '</ul>'; wp_reset_postdata(); } //add a shortcode add_shortcode('lastupdated-posts', 'wpb_lastupdated_posts');
Теперь нам нужно вставить код в шаблон там, где вы хотите выводить последние измененные записи:
<?php if (function_exists(wpb_lastupdated_posts)) : wpb_lastupdated_posts(); endif; ?>
В виджетах, записях, страницах можно выводить через шорткод [ lastupdated-posts ] (без пробелов)
Вывод записей по алфавиту
Для этого нужно будет отредактировать два файла:
- index.php - вывод на главных страницах
- category.php - вывод на страницах категорий\архивов\тегов
Файл index.php
Ищем что-то похожее на код:
<? php if ( have_posts () ) : while (have_posts()):the_post(); ?>
и заменяем его на код:
<? query_posts($query_string.'&orderby=title&order=asc'); if (have_posts()) : while (have_posts()) : the_post(); ?>
Файл category.php
Если нужно отображать записи в алфавитном порядке во всех категориях, то делаем тоже самое что и в файле index.php.
Если же это нужно сделать только для определенной категории то опять-таки ищем код похожий на:
<? php if ( have_posts () ) : while (have_posts()):the_post(); ?>
И заменяем его на код:
<? if ( in_category( 'X_CATEGORY' )) { query_posts($query_string.'&orderby=title&order=asc'); } if (have_posts()) : while (have_posts()) : the_post(); ?>
Где вместо X_CATEGORY указываем id категории или ярлык категории (ее название в url)
Направление алфавитного порядка:
- order=asc - прямое, от "а" до "я"
- order=desc - обратное, от "я" до "а"
Смена языка WordPress
Бывает что нужно изменить язык самой cms, ранее это делалось через файл wp-config, сейчас же все намного проще: нужно зайти в админ панели wordpress в "Настройки" - "Общие" и внизу страницы найти выпадающий список "Язык сайта".
Но! Я однажды столкнулся с тем, что там был лишь один язык - "English", мне же надо было переключить на французский. В таком случае нужно ручками скопировать файлы для этого языка:
- На странице make.wordpress.org/polyglots/teams/ находим нужный язык и жмем возле него на "details"
- Скачиваем language pack
- После этого загружаем скачанные файлы (которые находятся в архиве language pack) в папку "\wp-content\languages\" - теперь нужный язык станет доступен для выбора.
- Как альтернатива: можно просто скачать wordpress сборку с нужным языком и из него скопировать папку "\wp-content\languages\"
"Развернуть/свернуть все" в spoiler-блоках "Shortcodes Ultimate"
HTML
<a href="#" id="open-spoilers">Open spoilers/Close spoilers</a>
JAVASCRIPT
<script type="text/javascript">
jQuery(document).ready(function($) {
$('#open-spoilers').on('click', function(e) {
e.preventDefault();
if($('.su-spoiler').hasClass('su-spoiler-closed'))
{
$('.su-spoiler').removeClass('su-spoiler-closed').addClass('su-spoiler-open');
}
else
{
$('.su-spoiler').removeClass('su-spoiler-open').addClass('su-spoiler-closed');
}
e.stopPropagation();
});
});
</script>
Сортировка постов по title своими силами
Бывает что get_posts orderby=title не срабатывает, из-за конфликтов с другими плагинами.
Выход: отсортировать полученные посты своими силами:
$sort = array(); #создаем "ключевой" массив, по которому будем сортировать foreach($posts as $k=>$v) { #записываем в ключевой массив значения которые хотим отсортировать в порядке возрастания индекса $sort['post_title'][$k] = $v->post_title; } #сортируем ассоциативный многомерный массив в соответствии с порядком в ключевом массиве сохраняя все связи: array_multisort($sort['post_title'], SORT_ASC,$posts);
Если нужно сортировать по нескольким параметрам, то вот пример кода, от которого можно оттолкнутся:
$mylist = array( array('ID' => 1, 'title' => 'Boring Meeting', 'event_type' => 'meeting'), array('ID' => 2, 'title' => 'Find My Stapler', 'event_type' => 'meeting'), array('ID' => 3, 'title' => 'Mario Party', 'event_type' => 'party'), array('ID' => 4, 'title' => 'Duct Tape Party', 'event_type' => 'party') ); # get a list of sort columns and their data to pass to array_multisort $sort = array(); foreach($mylist as $k=>$v) { $sort['title'][$k] = $v['title']; $sort['event_type'][$k] = $v['event_type']; } # sort by event_type desc and then title asc array_multisort($sort['event_type'], SORT_DESC, $sort['title'], SORT_ASC,$mylist);
Преобразовать страницы в записи
Однажды мне попался очень большой сайт - около 15 000 страниц (именно страниц, а не записей) и у него были большие проблемы, wordpress еле шевелился. Проблема оказалась в том, что вместо того, чтобы использовать "Записи" использовались "Страницы", записей на сайте не было, а вот страниц в wordpress было около 15 000. Ситуацию исправило когда все я страницы преобразовал в записи, для этого нужно создать запрос в базе данных:
UPDATE wp_posts SET post_type= replace(post_type,"page","post")
- Встроенный редактор изображений. Вот его возможности: изменение размера изображений, масштабирование, обрезка, зеркалирование по вертикали или горизонтали, кнопки для отмены действий или повторения, поворот против или по часовой стрелке, восстановление оригинала изображения.
- В WordPress можно создать сеть сайтов - администрирование сети сайтов удобно, если у Вас есть несколько сайтов. Вам не придется обновлять версию WordPress на каждом сайте по отдельности, или устанавливать и обновлять плагины на каждом сайте, в сети сайтов это делается в один клик.
- Какой шаблон используется на чужом WordPress-сайте: можно посмотреть на исходный код страницы, ищите строку в которой фигурирует адрес "/wp-content/themes/тут_название_темы/css", альтернатива - установка расширения Theme Sniffer для браузера chrome
- Отображение скрытых опций: в админ-консоли в верхнем правом углу есть кнопка "Настройки экрана", в ней можно включать отображение тех или иных опций, о существовании которых вы могли даже не подозревать. Особенно приятно это обнаружить в вроде хорошо изученных плагинах.
- Изменить код ответа сервера можно при помощи функции status_header() . PHP-код нужно разместить до того как начнет выводиться HTML-код, иначе не будет работать. Прочитал тут: truemisha.ru/blog/wordpress/status_header.html
- Проверить WordPress на уязвимости
- Быстрое добавление ссылки: копируем ссылку в буфер обмена, выделяем нужный текст и вставляем ссылку - текст автоматически станет ссылкой с анкором.
- Многостраничные записи: для разбиения записи на страницы используйте тег "<!–nextpage–>"
- Встраивание контента при помощи вставки ссылки: вставьте ссылку на youtube или vimeo-ролик и он корректно встроится в вашу запись.
Исправляем права в папке linux:
sudo chown -R www-data:www-data /var/www/blog sudo find /var/www/blog -type d -exec chmod g+s {} \; sudo chmod -R g+w /var/www/blog/wp-content/themes sudo chmod -R g+w /var/www/blog/wp-content/plugins
Сайты с WordPress шаблонами
Помните что сайты бесплатными с шаблонами сильно любят встраивать в шаблоны рекламные ссылки или вредоносный код, будьте аккуратны.
- wordpress.org/themes - официальный сайт. Тут можно не бояться того, что будет вредоносный код.
- wordpress-tema.ru - красивые wordpress-шаблоны.
- wpbot.ru - wordpress-шаблоны. Автор блога переводит шаблоны на русский язык.
- wp-templates.ru - русские wordpress-шаблоны.
- wptheme.us
- wpfree.ru
- wordpresse.ru
- ru-wordpress.com
- wpbot.ru
- newwpthemes.com - достаточно однотипные бесплатные шаблоны. На английском языке.
- wpexplorer.com/top-free-themes - красивейшие бесплатные шаблоны в стиле минимализма
Остальное
Спасибо тебе, автор. Взял многое на вооружение.
Столько информации в одной статье. Спасибо. Конечно для новичков наверное не очень понятно будет что к чему. Ну вот мне как раз эта краткость подходит. Все что нужно было увидела, а подробностями зачем перегружать мозги.
Ну а вы интересно этот jetpack используете? Я на него смотрела, многофункциональная стоящая вещь
Alisa, да использую. Несколько месяцев как начал. В нем действительно достаточно много функционала, который перекрывает половину установленных плагинов. =) Тот или иной функционал можно отключать или включать.
Владимир, уточните пожалуйста, в какой файл добавлять тег noindex для архивов, поиска, пагинации, 404? В functions.php?
Карина, да, в functions.php или в свой плагин.
как отключить уведомление темы в консоли WordPress? Постоянно появляется сообщение о покупке темы.
Подскажите, как с помощью php запретить работу уже активированного плагина? вопрос актуальный, например, когда WP работает в режиме soket, где не все плагины нужны