Десяток корисних хаків для WordPress

Вирішив зібрати колекцію хаків та фішок, які я останнім часом часто використовую при створенні сайтів на WordPress.

Брендована адмінка.

Задача: Зробити вивід власного логотипу замість логотипу WordPress на сторінці логіну в адмінку, та в заголовку адмінки.

Для виводу логотипу на сторінці логіну зкопіюйте цей код в файл functions.php вашої теми:

function my_custom_login_logo() {
    echo '<style type="text/css">
        html {background-color:#001721;}
        h1 a { background-image:url('.get_bloginfo('template_directory').'/images/logo.png) !important; } </style>';
}

add_action('login_head', 'my_custom_login_logo');

Цим самим ви замінюєте вивід логотипа на власний logo.png , що знаходиться в папці images вашої поточної теми. Як бачите, зміни стосуються лише css’у і ви можете туди додати ще свої стилі для інших елементів (я, наприклад, ще люблю поміняти фон під фірмові кольори та тінь додати яскравого кольору, щоб було як ефект м’ягкої підсвітки)

Ось приклади таких сторінок логіну:

А ось код, що змінить логотип в заголовку адмінки:

 function my_custom_logo() {
    echo '<style type="text/css">#header-logo { background-image: url('.get_bloginfo('template_directory').'/img/clogo.png) !important; }</style> ';
    }
add_action('admin_head', 'my_custom_logo');

Тут я теж люблю додавати стилі, щоб забрати заголовок сайту і зробити лого клікабельним. Приклад зміненої шапки адмінки

Заміна тексту в футері адмінки

Ще одна фішка, добавляє в футер адмінки дані про використану оперативку на хостингу і кількість запитів до MySQL та швидкість генерації сторінки:

function usage($value) {
	if ($value == 1)
		echo '<div class="usage">';
	
	printf(('%d / %s'), get_num_queries(), timer_stop(0, 3));
	echo ' / ' . round(memory_get_usage()/1024/1024, 2) . ' мб';
	
	if ($value == 1)
		echo '</div>';
}
add_action('admin_footer_text', 'usage');

Звичайно ви можете замінити це і в команді echo виводити якусь іншу інформацію.

Видалення непотрібних блоків в “Майстерні”

Наступний хак видаляє непотрібні блоки з головної сторінки адмінки, так званої “Майстерні” :

function custom_dashboard() {
	global $wp_meta_boxes;

	//unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now']);
	unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_comments']);
	unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links']);
	unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']);
	unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press']);
	unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_recent_drafts']);
	unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);
	unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']);
}
add_action('wp_dashboard_setup', 'custom_dashboard');

В кожному рядку видаляється по одному блоку з “Майстерні”:

dashboard_recent_comments — свіжі коментарі
dashboard_incoming_links — вхідні посилання
dashboard_plugins — rss новин плагіни
dashboard_quick_press — швидка публікація
dashboard_recent_drafts — нещодавні чернетки
dashboard_primary — rss новини WordPress
dashboard_secondary — rss інші новини WordPress

Я зазвичай видаляю все окрім основного блоку “Прямо зараз”. На сайтах з включеною можливістю коментування ще залишаю блок “Свіжі коментарі”. Ви можете так само вибірково видалити непотрібні елементи, видаливши рядок, що відповідає йому.

Видалення непотрібних блоків в head секції

Наступний хак я використовую на сайтах-візитках де не потрібно rss і перелінковки між постами, так як основний контент йде на сторінках. Він видаляє купу непотрібних рядків в секції head коду html.

remove_action('wp_head', 'feed_links', 2); //rss
remove_action('wp_head', 'feed_links_extra', 3); //atom 
remove_action('wp_head', 'index_rel_link'); // тут і нижче лінки для перелінковки сторінок
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);
remove_action('wp_head', 'next_post_rel_link', 10, 0);
remove_action('wp_head', 'parent_post_rel_link', 10, 0);
remove_action('wp_head', 'rel_canonical');
remove_action('wp_head', 'start_post_rel_link', 10, 0);
remove_action('wp_head', 'rsd_link'); // лінка для трекбеків
remove_action('wp_head', 'wlwmanifest_link'); // лінка для редактора Windows Live Writer
remove_action('wp_head', 'wp_generator'); // тег, в якому пише версія вордпресу
remove_action( 'init', 'wp_version_check' ); // видалення провірки оновлень
remove_action( 'load-plugins.php', 'wp_update_plugins' ); // не провіряти оновлення плагінів
remove_action( 'load-update.php', 'wp_update_plugins' );
remove_action( 'admin_init', '_maybe_update_plugins' );
remove_action( 'wp_update_plugins', 'wp_update_plugins' );
remove_action( 'admin_init', '_maybe_update_themes' ); // не провіряти оновлення тем
remove_action( 'wp_update_themes', 'wp_update_themes' );

Використовувати це чи ні на вашому блозі це вже на ваш розсуд.

Заборона вставляти лінки в коментарях

Якщо ви не хочете, щоб лінки залишені коментаторами автоматично конвертувались в клікабельні посилання, то вставте цей код в functions.php:

remove_filter('comment_text', 'make_clickable', 9)

 

Показувати повідомлення про нову версію вордпреса лише для адмінів

< ?php
function stop_wpupdate() {
if ( current_user_can('manage_options') ) {
return;
} else {
remove_action( 'admin_notices', 'update_nag', 3 );
}
}
add_action( 'admin_notices', 'stop_wpupdate', 1 );
?>

 

Кнопки видалення коментарів на сторінці посту

Попередня фішка з показом повідомлень оновлень вордпресу для адмінів використовує функцію current_user_can яка визначає, чи має поточний юзер певні права. На основі цього я зробив фішку, що показує лінки на видалення коментарів і встановлення помітки “спам” для адміністраторів на сторінці посту. Цей код вставляєм в functions.php:

function delete_comment_link($id) {
  if (current_user_can('edit_post')) {
    echo '| <a href="'.admin_url("comment.php?action=cdc&amp;c=$id").'">del</a> ';
    echo '| <a href="'.admin_url("comment.php?action=cdc&amp;dt=spam&amp;c=$id").'">spam</a>';
  }
}

А саму функцію delete_comment_link вставляєм в файл comments.php вашої теми після функції edit_comment_link :

<?php edit_comment_link('Edit','',' '); delete_comment_link(get_comment_ID());?>

 

Анонс постів з певної рубрики в сайдбарі

В мене було завдання вивести в сайдбарі по першому реченню із трьох постів в рубриці “Проекти”. Я використав такий код в файлі sidebar.php :

     <div class="sidenews">
     <?php $my_query = new WP_Query('category_name=projects&showposts=3');
     while ($my_query->have_posts()) : $my_query->the_post(); ?>
     <h3><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3>
     <?php preg_match( '/^.{150,}?[.?!]+(?=\s|$)/ ', get_the_content(), $A );
                               echo '<p>'.$A[ 0 ].'</p>'; ?>   
     <?php endwhile; ?>
     <p><a href="<?php echo get_category_link('4') ?>">Все проекты</a></p>
     </div>

Використаний регулярний вираз шукає перше речення, але якщо це речення менше 150 символів, то вона захопить і наступні речення. Таким чином я уникнув помилки, коли в першому реченні зустрічається чиєсь прізвище чи адрес сайту.

Вставка кнопки твітера Tweet

Щоб появилась кнопка з підрахуноком кількості ретвітів потрібно вставити ось такий код в файл single.php вашої теми (наприклад після коду the_title(); ):

<a href="http://twitter.com/share" class="twitter-share-button" data-text="<?php the_title(); ?>" data-url="<?php the_permalink(); ?>" data-count="horizontal">Tweet</a>
<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>

Це виведе горизонтальну кнопку з кількістю ретвітів з правої сторони. А щоб кількість ретвітів показувалось над кнопкою, то замініть data-count="horizontal" на data-count="vertical"

Ну і наостанок маленький хак: щоб в редакторі постів зробити перенос рядка br потрібно натискати Shift+Enter