Баги Вордпресса и их устранение

Столкнулся с Вордпресс - просто влюбился в движок! Он настраивается! По сравнению с Друпалом - просто чудеса логики и внутренней красоты.

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

Итак, первый найденный баг: при использовании на странице виджета "последние комментарии" в <head> WordPress вставляет изумительную строчку:

recentcomments a{display:inline !important;padding: 0 !important;margin: 0 !important;}

Супер, да? И ее снести обычными средствами невозможно, для этого нужно править ядро... или не править ядро 🙂

Я не боюсь править ядро, но это очень неудобно: дело в том, что обновления опенсорцевых софтин - жизненно необходимая вещь (только так возможно реагировать на проблему спама, взломов и т.п.) А при отредактированных файлах ядра при обновлениях изменения будут утрачены, и встает вопрос в логировании ваших действий, что является баааальшой проблемой для тех, кто на рабочем столе (что оффлайновом, что компьютерном) имеет беспорядок...

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

Итак, для решения этой проблемы вам нужно найти файл functions.php и в любом месте его кода добавить следующие строчки:

function twentyten_remove_recent_comments_style() {
global $wp_widget_factory;
remove_action( 'wp_head', array( $wp_widget_factory->widgets['WP_Widget_Recent_Comments'], 'recent_comments_style' ) );
}
add_action( 'widgets_init', 'twentyten_remove_recent_comments_style' );

Вторая проблема - все там же присутствует такой же кусок уродливого бессмысленного кода:

<style type="text/css">
html { margin-top: 28px !important; }
* html body { margin-top: 28px !important; }
</style>

Чтобы его убрать, нужно в том же файлике (да, пока не буду закрывать его в редакторе!) добавить строчки:

function my_function_admin_bar(){ return false; } add_filter( 'show_admin_bar' , 'my_function_admin_bar'); 

Таким образом, мы убираем верхний админо-юзерский бар (его необхомость - под большим вопросом), и избавляемся от этого кода...

Остальной мусорный код я даже описывать не буду, убирается он так:

remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wlwmanifest_link');
remove_action( 'wp_head', 'wp_generator' );

Третья проблема, на решение и поиски решения которой я отдал больше часа - это проблема кода

Этот безумный код подключает библиотеку, которая отвечает за выпадающие меню. А когда подобного меню нет на сайте - то довольно глупо иметь этот код. И вот это художество (за которое ответственны создатели темы wordpress) убирается вставкой в header кода над строчкой вызова <?php  wp_head(); ?>:

<?php wp_deregister_script('jquery'); ?>

Четвертая проблема отняла у меня часа 2 жизни 🙂 Мне не нравилось, что Вордпресс загружает фото в свою дефолтную директорию: /wp-content/uploads/. Я хотел, чтобы рабочая папка была в корне домена и называлась content. Как обычно, интернет был готов мне помочь... вот только ни одно решение не помогало. В итоге пришлось обратиться к коллективному разуму гуру, и выход найден. Снова не нужно лезть в ядро, и все решается в файле wp-congig.php вставкой таких строчек вниз:

define( 'UPLOADS', 'content' );
define('WP_CONTENT_URL', 'http://webkniga.com/content');
define( 'WP_CONTENT_DIR', ABSPATH . 'content' );

Итог:

В файл темы functions.php добавляем код вниз:

function twentyten_remove_recent_comments_style() {
global $wp_widget_factory;
remove_action( 'wp_head', array( $wp_widget_factory->widgets['WP_Widget_Recent_Comments'], 'recent_comments_style' ) );
}
add_action( 'widgets_init', 'twentyten_remove_recent_comments_style' );
function my_function_admin_bar(){ return false; }
add_filter( 'show_admin_bar' , 'my_function_admin_bar');
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wlwmanifest_link');
remove_action( 'wp_head', 'wp_generator' );
remove_action( 'wp_head','wp_syntax_head');

// полезности при отображении поста - следующая, предыдущая запись, оригинальный url и т.п. - не разбирался еще с этим
remove_action('wp_head','start_post_rel_link',10,0);
remove_action('wp_head','index_rel_link');
remove_action('wp_head','rel_canonical');
remove_action( 'wp_head','adjacent_posts_rel_link_wp_head', 10, 0 );
remove_action( 'wp_head','wp_shortlink_wp_head', 10, 0 );

// Скрываем поле "сайт" в комментариях
add_filter('comment_form_default_fields', 'mytheme_remove_url');
function mytheme_remove_url($arg) {
$arg['url'] = '';
return $arg;
}

Дополнение от 02.11.2013

Есть еще одна фича. Чтобы вордпресс по дефолту при добавлении фотографии не вставлял ссылку на нее, нужно зайти по адресу wp-admin/options.php, найти там параметр  "image_default_link_type" и заполнить ему значение "none"

И еще одна тонкость от 23.11.2013

Чтобы вордпресс не шалил с кавычками, в functions.php вставляем такую конструкцию:

# Отключение преобразования кавычек
if ( function_exists('remove_filter') ) {
remove_filter('the_content', 'wptexturize');
remove_filter('the_title', 'wptexturize');
remove_filter('comment_text', 'wptexturize');
}

Второй вариант решения этой проблемки:

// Убираем автоматическое преобразование кавычек
remove_filter('the_content', 'wptexturize');
remove_filter('the_title', 'wptexturize');
remove_filter('comment_text', 'wptexturize');
remove_filter('the_excerpt', 'wptexturize');

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