Представляем несколько коротких, но полезных фрагментов кода, которые немного упростят вашу жизнь, как WordPress разработчика, Мы поговорим обо всем понемногу, начиная с автоматического удаления постов, быстрого  выбора иконки поста и заканчивая перенаправлением пользователей, как только они авторизировались. Начнем с нескольких простых сниппетов в одну строку.

1. Скрываем внешнюю панель управления

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

show_admin_bar(FALSE);

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

2. Автоматически удаляем посты из корзины

Количество постов в корзине может нарастать, если вы забываете их удалять. Используйте этот код в /wp-config.php , чтобы очистить корзину:

define('EMPTY_TRASH_DAYS', 5 );

3. Включаем внутренний отладчик WordPress

При разработке  необходимо видеть ошибки, выдаваемые вашим кодом. Помните, что не все ошибки останавливают выполнение скрипта, но, тем не менее, это ошибки, и они могут странным образом влиять на другие части вашего кода. Потому, включите отладку WordPress в вашем файле  /wp-config.php:

define('WP_DEBUG', TRUE);

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

4. Перенаправляем пользователей после авторизации

Обычно после авторизации пользователь попадает сразу в свою панель управления. Возможно, вы этого не хотите. Наш код использует фильтр login_redirect, чтобы перенаправить пользователя, не являющегося администратором,  на главную страницу:

add_filter("login_redirect", "subscriber_login_redirect", 10, 3);
function subscriber_login_redirect($redirect_to, $request, $user){
  if(is_array($user->roles)){
    if(in_array('administrator', $user->roles)) return home_url('/wp-admin/');
  }
  return home_url();
}

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

5. Показываем стандартную иконку поста

Начиная с версии 2.9, WordPress предоставляет возможность создавать иконку поста, как, например, вы можете увидеть здесь, на wpcafe.org. При добавлении поста администратором это называется «Featured Image» (Миниатюра). Но если у вас нет особой картинки для поста, вы можете просто вызвать картинку по умолчанию.

Внутри цикла:

if(has_post_thumbnail()){
  the_post_thumbnail();
}else{
  echo '<img src="' .  get_bloginfo('template_directory') . '/images/default_post_thumb.jpg" />';
}
  • проверяем, есть ли иконка у поста с помощью has_post_thumbnail
  • Если да, показываем ее с помощью the_post_thumbnail()
  • Иначе генерируем тег img для стандартной картинки

У вас даже может быть несколько картинок по умолчанию, одну из которых вы будете выбирать случайным образом.

6. Показываем время с момента публикации для постов и комментариев

Вместо  «Опубликовано  25/11/1011»  можно вывести «Опубликовано 3 дня назад».

Используется в цикле:

echo human_time_diff(get_the_time('U'), current_time('timestamp')) . ' ago';

Также можно использовать для комментариев:

echo human_time_diff(get_comment_time('U'), current_time('timestamp')) . ' ago';

Или можно показывать обычную дату / время только если пост старше недели, в противном случае выводить время с момента публикации.

$time_diff = current_time('timestamp') - get_the_time('U');
if($time_diff < 604800){//seconds in a week = 604800
  echo 'Posted ' . human_time_diff(get_the_time('U'), current_time('timestamp')) . ' ago';
}else{
  echo 'Posted on ' . get_the_date() . ', ' . get_the_time();
};

7. Отдельный стиль для комментариев автора

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

Чтобы определить, какие комментарии были написаны автором поста, мы используем этот код для вывода названия класса:

if($comment->user_id == get_the_author_meta('ID')){
  echo '<div class="comment_wrapper author_comment">';
}else{
  echo '<div class="comment_wrapper">';
}

Мы сравниваем идентификатор пользователя, оставившего комментарий, с идентификатором автора поста, который получаем с помощью функции get_the_author_meta. Если они совпадают, мы выводим класс author_comment, стиль для которого мы  прописываем в css.

8. Показываем информацию о пользователях, постах, комментариях вашего сайта на WordPress

Вы можете сделать запрос напрямую в вашу базу данных WordPress, чтобы показать нужную информацию по сайту. Вставьте эту функцию в файл темы functions.php и вызывайте ее в любом месте с помощью  get_site_data()

function get_site_data(){
  global $wpdb;
  $users = $wpdb->get_var("SELECT COUNT(ID) FROM $wpdb->users");
  $posts = $wpdb->get_var("SELECT COUNT(ID) FROM $wpdb->posts WHERE post_status = 'publish'");
  $comments = $wpdb->get_var("SELECT COUNT(comment_ID) FROM $wpdb->comments");
  echo '<p>' . $users . ' members have made ' . $comments . ' comments in ' . $posts . ' posts</p>';
}

Это лучше, чем вызывать стандартные функции WordPress, так как можно подсчитать посты всех типов, а также только опубликованные на данный момент посты.

9. Правильное добавление файла JavaScript

WordPress предоставляет функцию wp_enqueue_script для безопасного добавления скриптов.

Допустим, наша папка со скриптами находится внутри папки шаблонов, и там у нас есть файл do_stuff.js  Так что путь у нас получается такой: url_to_template_dir/scripts/do_stuff.js

Давайте теперь правильно вставим наш скрипт. Код нужно вставить перед wp_head в ваш файл шапки (header.php):

$script_url = get_template_directory_uri() . '/scripts/do_stuff.js';
wp_enqueue_script('do_stuff', $script_url);

Здесь мы соединяем путь к нашему скрипту и его название с результатом WordPress-функции get_template_directory_uri

Затем мы добавляем  наш скрипт, задавая для него идентификатор (для возможного дальнейшего использования) и  URL скрипта. Теперь WordPress будет подключать наш скрипт на каждой странице.

Реальное преимущество этого в том, что если, например, наш скрипт do_stuff – это jQuery скрипт, нам также нужно иметь подгруженный jQuery.

Теперь же  jQuery по умолчанию подключен в WordPress и был предварительно зарегистрирован с идентификатором jQuery. Так что все, что нам нужно – это добавить наш jQuery, а затем добавить наш do_stuff.js , вот так:

wp_enqueue_script('jquery');
$script_url = get_template_directory_uri() . '/scripts/do_stuff.js';
wp_enqueue_script('do_stuff', $script_url, array('jquery'));

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

Источник: WP TutsPlus.com

Вам понравился материал?

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

Такой e-mail уже зарегистрирован. Воспользуйтесь формой входа или введите другой.

Вы ввели некорректные логин или пароль

Извините, для комментирования необходимо войти.

18 комментариев

сначала новые
по рейтингу сначала новые по хронологии

Здравствуйте, помогите пожалуйста убрать иконку из поста
Я зделал шаблон в генераторе шаблонов Artesteer но не могу в файлах темы найти php код, где нужно его удалить чтобы не светилась иконка в посте, хочу чтобы был только текст
шаблон сделал для Wordpress

Правым кликом на нее в Хроме - Inspect element, посмотреть в коде, откуда она берется. Она может быть прописана как в коде php страницы, так и в стилях оформления style.css

Я так уже смотрел, нашел только в Elements код html

но где єтот php в теме WordPress которий выводит картинку

В стилях прописано только:

h2.art-postheader img
{
border: none !important;
vertical-align: middle; margin: 0 5px 0 0;

і всьо

сайт - http://www.perevozkiev.com.ua

Значит этот код сидит скорее всего в index.php

art_get_post_id(),

'class' => art_get_post_class(),

'thumbnail' => art_get_post_thumbnail(),

'title' => 'ID).'" rel="bookmark" title="'.get_the_title().'">'.get_the_title().'',

'before' => art_get_metadata_icons('', 'header'),

'content' => art_get_excerpt(), // 'content' => 'My post content',

'after' => art_get_metadata_icons('comments', 'footer')

)

);

}

art_pagination();// previous_posts_link | next_posts_link

} else {

art_post_wrapper(

array(

'title' => __('Not Found', THEME_NS),

'content' => ''

.__( 'Apologies, but the page you requested could not be found. Perhaps searching will help.', THEME_NS)

. '' . "rn" . art_get_search()

)

);

}

get_sidebar('bottom');

?>

<?php get_footer();

тут есть ?

Доброго времени суток! Подскажите пожалуйста, куда вставлять приведенный в примере(4,5) код,в funcion.php ? И еще такой вопрос,без разницы в какое место,будь то начало,середина или конец? Спасибо.

Код 4 - в любое место functions.php, главное не нарушить структуру кода и не вставить посреди какой-то функции. Лучше всего - в конце перед закрытием ?>

Код 5 - внутри цикла вывода постов в файле single.php или page.php

Спасибо.

Подскажите пожалуйста. Какой плагин можно использовать для реализации подсветки изображений(с гиперссылкой) при наведении на него, как у Вас в теме блога. Извините, что не в тему.

Для этого не нужен плагин. Нужно добавить в файл style.css для картинок правило

#content .post .entry a:hover img {opacity: 0.8;}

Наверное чего-то не понимаю, но пункт 2 — удаление старых публикаций из корзины не работает у меня в WP 3.5.

Виталий

Простите, а где эта строка находится в основном..?
show_admin_bar(FALSE);

Этот сниппет уже не актуален для последних версий WordPress 3.3 и старше.

Весьма полезные советы.

Александр

Спасибо за совет, как скрыть внешнюю панель администратора. Удачи вам!

Здравствуйте! Не могли бы Вы сказать как сделать чтоб вместо миниатюры записи выводилась картинка которая есть в этом посте, в определенном размере...допустим 300 на 150

Отличные советы, особенно понравился вывод миниатюр без использования джаваскрипта)