10 Полезные WordPress Крюк хаки

Содержание скрыть

Что такое крюк?

Для достижения особого влияния на WordPress блог, вы должны изменить, как WordPress работ. Некоторые из этих изменений сделаны к тому, что WordPress разработчики называют “основные файлы”, файлы, необходимые WordPress работать должным образом.

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

Тем не менее, разработчики должны перезаписать некоторые функции WordPress, поэтому WordPress предоставляет API Plugin.

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

Как использовать крючки на вашем WordPress блог

Если вы не пишете плагин, вы бы написать крючки в файле functions.php. Этот файл находится в каталоге wp-content/themes/yourtheme.

Крючок, как и следовало ожидать, «подцепляет» одну функцию к другой. Например, вы можете написать пользовательскую функцию и прикрепить ее к одной из основных функций WordPress:

add_action ( 'publish_post', 'myCustomFunction' );

В этом примере мы крючком нашей собственной пользовательской функции wordPress publish-post ‘функция, а это означает, что каждый раз, когда WordPress выполняет publish-post функцию, он также будет выполнять эту функцию крючком.

Конечно, мы также можем удалить крючки с помощью remove_action() функции:

remove_action ( 'publish_post', 'myCustomFunction' );

Крючки ресурсов:

1. Отключить WordPress’ Автоматическое форматирование

Screenshot

Проблема.
Вы, наверное, заметили, что по умолчанию WordPress преобразует нормальные цитаты в “кудрявые” котировки, и делает другие небольшие изменения форматирования, когда сообщение отображается.

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

Решение.
Просто вставьте следующий код в файл functions.php:

function my_formatter($content) {
  $new_content = ’;
  $pattern_full = '{([raw].*?[/raw])}is';
  $pattern_contents = '{[raw](.*?)[/raw]}is';
  $pieces = preg_split($pattern_full, $content, -1, PREG_SPLIT_DELIM_CAPTURE);

  foreach ($pieces as $piece) {
    if (preg_match($pattern_contents, $piece, $matches)) {
      $new_content .= $matches[1];
    } else {
      $new_content .= wptexturize(wpautop($piece));
    }
  }

  return $new_content;
}

remove_filter('the_content', 'wpautop');
remove_filter('the_content', 'wptexturize');

add_filter('the_content', 'my_formatter', 99);

Как только это будет сделано, вы можете использовать [raw] короткий код в своих публикациях:

[raw]This text will not be automatically formatted.[/raw]

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

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

Чтобы удалить автоматическое форматирование, мы используем remove_filter() функцию, которая позволяет удалить крючок на определенной функции.

Источник:

2. Обнаружить браузер посетителя с помощью крючка

Screenshot

Проблема.
Совместимость кросс-браузера, вероятно, является наиболее распространенной проблемой в веб-разработке. Вы сэкономите себе много головной боли, если вы в состоянии обнаружить браузеры, которые люди используют для посещения вашего сайта, а затем создать пользовательский класс, завернутый в body тег. Мало кто знает об этом, но WordPress уже может обнаружить браузеры, и несколько глобальных переменных доступны для нас, чтобы использовать.

Решение.
Ничего сложного здесь: просто вставьте код ниже в файле functions.php, а затем сохранить файл, и вы сделали!

<?php
add_filter('body_class','browser_body_class');
function browser_body_class($classes) {
  global $is_lynx, $is_gecko, $is_IE, $is_opera, $is_NS4, $is_safari, $is_chrome, $is_iphone;

  if($is_lynx) $classes[] = 'lynx';
  elseif($is_gecko) $classes[] = 'gecko';
  elseif($is_opera) $classes[] = 'opera';
  elseif($is_NS4) $classes[] = 'ns4';
  elseif($is_safari) $classes[] = 'safari';
  elseif($is_chrome) $classes[] = 'chrome';
  elseif($is_IE) $classes[] = 'ie';
  else $classes[] = 'unknown';

  if($is_iphone) $classes[] = 'iphone';
  return $classes;
}
?>

После того как вы сохранили файл, функция автоматически добавит класс CSS в body тег, как показано на примере ниже:

<body class="home blog logged-in safari">

Объяснение кода.
WordPress имеет глобальные переменные, которые true возвращаются, если посетитель использует определенный браузер. Если браузером посетителя является Google Chrome, $is_chrome переменная true вернется. Именно поэтому мы создаем browser_body_class() функцию, которая возвращает имя браузера посетителя. Как только это будет сделано, мы просто подключить функцию WordPress body_class() ‘функции.

Источников:

3. Определите текст по умолчанию в TinyMCE

Screenshot

Проблема.
Многие блоггеры почти всегда используют тот же макет для своих блогах. Сообщения на моем блоге WpRecipes.com всегда отображаются таким же образом: некоторые текст, некоторые код, а затем еще несколько текста.

Как насчет экономии времени, заставляя tinyMCE (WordPress’ визуальный редактор) для отображения текста по умолчанию?

Решение.
Еще раз, крючки являются решением. Просто откройте свой файл functions.php, вставьте код и позвольте крючкам работать их магия!

<?php
add_filter('default_content', 'my_editor_content');

function my_editor_content( $content ) {
  $content = "If you enjoyed this post, make sure to subscribe to my rss feed.";
  return $content;
}
?>

Объяснение кода.
Этот код является мощным, и все же метод настолько прост. Просто создайте функцию, которая возвращает желаемый текст (в этом примере, мы определили несколько простых текст, который просит читателей подписаться на RSS-канал блога), и подключить функцию WordPress default_content() ‘функции. Ну вот.

Источников:

4. Вставьте содержимое автоматически после каждого поста

Screenshot

Проблема.
Большинство блогов используют шаблон single.php для вставки текста, изображений или объявлений сразу после публикации. Конечно, это можно сделать, открыв single.php и вставки желаемого текста после the_content() функции. Но текст не будет отображаться в вашем RSS-канале? Крючки и техника, описанная ниже, решают эту проблему.

Решение.
Один раз, просто вставьте код ниже в functions.php файл вашей темы. Ну вот.

function insertFootNote($content) {
        if(!is_feed() && !is_home()) {
                $content.= "<div class='subscribe'>";
                $content.= "<h4>Enjoyed this article?</h4>";
                $content.= "<p>Subscribe to our  <a href='http://feeds2.feedburner.com/WpRecipes'>RSS feed</a> and never miss a recipe!</p>";
                $content.= "</div>";
        }
        return $content;
}
add_filter ('the_content', 'insertFootNote');

Объяснение кода.
Цель insertFootNote() функции довольно проста: она просто конкатирует текст по вашему выбору с $content переменной, которая содержит содержание вашего поста.

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

Обратите внимание (!is_feed) на состояние на строке 2, которая предотвращает вставку текста в RSS-канал. Если вы хотите, чтобы текст появился в RSS-канале, замените строку 2 следующим:

if (!is_home()) {

Источников:

5. Отключить “Пожалуйста, обновление сейчас” Сообщение на WordPress приборной панели

Screenshot

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

Решение.
Просто вставьте эти четыре строки кода в файл functions.php:

if (!current_user_can('edit_users')) {
  add_action( 'init', create_function( '$a', "remove_action( 'init', 'wp_version_check' );" ), 2 );
  add_filter( 'pre_option_update_core', create_function( '$a', "return null;" ) );
}

После сохранения functions.phpвы не увидите сообщение на панели мониторинга.

Объяснение кода.
Первое, что мы делаем здесь, это убедиться, что текущий пользователь имеет достаточные административные права для обновления WordPress. Как только мы это сделаем, мы просто создаем два крючка, чтобы перезаписать автоматическую проверку обновлений и отображения сообщений.

Источников:

6. Отключить WordPress от автоматического сохранения сообщений

Screenshot
Фото, чтоcanadiangirl

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

Решение.
Чтобы отключить функцию автоматического сохранения WordPress, просто откройте файл function.php и вставьте следующую функцию:

function disableAutoSave(){
    wp_deregister_script('autosave');
}
add_action( 'wp_print_scripts', 'disableAutoSave' );

Объяснение кода.
Опять же, ничего сложного в этом коде. Мы просто создаем действие (на линии 4) и подключить disableAutoSave() функцию, которую мы создали на линии 1 к wp_print_scripts() WordPress’.

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

Источников:

7. Предотвратить дублирование контента на страницах комментариев

Screenshot

Проблема.
Дублирование содержания является проблемой SEO для многих веб-сайтов. Она также может быть проблемой для вашего блога WordPress, если вы не применяете несколько трюков.

Введенный в версии 2.7, на странице комментарии является отличным дополнением к WordPress, поскольку он позволяет блоггерам разделить комментарии на несколько страниц. Единственная проблема, опять же, является риск дублирования контента.

Давайте использовать новый rel=“canonical” атрибут для предотвращения дублирования содержимого в комментариях на страницах.

Решение.
Просто вставьте следующий код в файл function.php:

function canonical_for_comments() {
  global $cpage, $post;
  if ( $cpage > 1 ) :
    echo "n";
      echo "<link rel='canonical' href='";
      echo get_permalink( $post->ID );
      echo "' />n";
   endif;
}

add_action( 'wp_head', 'canonical_for_comments' );

Объяснение кода.
Во-первых, мы создаем функцию для добавления rel=“canonical” атрибута на страницы комментариев, за исключением страницы 1. Затем мы подключить эту функцию к wp_head() функции WordPress. Так просто!

Источников:

8. Получить всю должность или страницу в переменной PHP

Screenshot

Проблема.
Будучи в состоянии получить весь текущий пост или страницу в качестве переменной PHP, безусловно, хорошо. Можно, например, заменить части содержимого с помощью str_replace() функции PHP и многое другое.

Решение.
Еще раз, ничего сложного. Просто вставьте следующее в файл function.php.

function callback($buffer) {
  // modify buffer here, and then return the updated code return $buffer;
}

function buffer_start() {
  ob_start("callback");
}

function buffer_end() {
  ob_end_flush();
}

add_action('wp_head', 'buffer_start');
add_action('wp_footer', 'buffer_end');

Объяснение кода.
Для достижения этой взлома, нам нужно три функции:

  • callback(): эта функция возвращает всю страницу в качестве переменной, называемой $buffer . Вы можете изменить его, прежде чем вернуть его с помощью регулярных выражений, например.
  • buffer_start(): эта функция просто запускает буфер. Он подключен к wp_head() функции WordPress.
  • buffer_end(): эта функция очищает буфер. Он подключен к wp_footer() функции WordPress.

Как только мы имеем нашу функцию, мы как раз зацепили его к существуя функциям WordPress.

Источников:

9. Используйте крючки и Крон для расписания событий

Screenshot

Проблема.
Вы, наверное, уже знаете, что WordPress может планировать события. Например, он может публиковать публикации на заданные даты и время. Используя крючки и wp-cron , мы можем легко планировать наши собственные события. В этом примере, мы получим наш блог WordPress, чтобы отправить нам по электронной почте один раз в час.

Решение.
Вставьте следующий блок кода в файл functions.php вашей темы.

if (!wp_next_scheduled('my_task_hook')) {
  wp_schedule_event( time(), 'hourly', 'my_task_hook' );
}

add_action( 'my_task_hook', 'my_task_function' );

function my_task_function() {
  wp_mail('you@yoursite.com', 'Automatic email', 'Hello, this is an automatically scheduled email from WordPress.');
}

Объяснение кода.
Первое, что мы сделали, конечно, было создать функцию, которая выполняет желаемое действие. В этом примере функция my_task_function() вызывается, и она просто отправляет электронное письмо на указанный адрес электронной почты.

Чтобы запланировать событие, мы должны использовать wp_schedule_event() эту функцию. Последний аргумент должен быть крючок, поэтому мы подключить нашу my_task_function() функцию my_task_hook .

Источников:

  • Сроки это все: планирование в WordPress

10. Перечень всех крючковатых функций

Screenshot

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

Решение.
Как и в других, этот код должен быть вставлен в файл functions.php. Когда вы закончите отладку, не забудьте удалить код из functions.php,иначе сообщение отладки будет продолжать появляться.

function list_hooked_functions($tag=false){
 global $wp_filter;
 if ($tag) {
  $hook[$tag]=$wp_filter[$tag];
  if (!is_array($hook[$tag])) {
  trigger_error("Nothing found for '$tag' hook", E_USER_WARNING);
  return;
  }
 }
 else {
  $hook=$wp_filter;
  ksort($hook);
 }
 echo '<pre>';
 foreach($hook as $tag => $priority){
  echo "<br />&gt;&gt;&gt;&gt;&gt;t<strong>$tag</strong><br />";
  ksort($priority);
  foreach($priority as $priority => $function){
  echo $priority;
  foreach($function as $name => $properties) echo "t$name<br />";
  }
 }
 echo '</pre>';
 return;
}

6. Отключить WordPress от автоматического сохранения сообщений

Screenshot
Фото, чтоcanadiangirl

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

Решение.
Чтобы отключить функцию автоматического сохранения WordPress, просто откройте файл function.php и вставьте следующую функцию:

function disableAutoSave(){
    wp_deregister_script('autosave');
}
add_action( 'wp_print_scripts', 'disableAutoSave' );

Объяснение кода.
Опять же, ничего сложного в этом коде. Мы просто создаем действие (на линии 4) и подключить disableAutoSave() функцию, которую мы создали на линии 1 к wp_print_scripts() WordPress’.

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

Источников:

7. Предотвратить дублирование контента на страницах комментариев

Screenshot

Проблема.
Дублирование содержания является проблемой SEO для многих веб-сайтов. Она также может быть проблемой для вашего блога WordPress, если вы не применяете несколько трюков.

Введенный в версии 2.7, на странице комментарии является отличным дополнением к WordPress, поскольку он позволяет блоггерам разделить комментарии на несколько страниц. Единственная проблема, опять же, является риск дублирования контента.

Давайте использовать новый rel=“canonical” атрибут для предотвращения дублирования содержимого в комментариях на страницах.

Решение.
Просто вставьте следующий код в файл function.php:

function canonical_for_comments() {
  global $cpage, $post;
  if ( $cpage > 1 ) :
    echo "n";
      echo "<link rel='canonical' href='";
      echo get_permalink( $post->ID );
      echo "' />n";
   endif;
}

add_action( 'wp_head', 'canonical_for_comments' );

Объяснение кода.
Во-первых, мы создаем функцию для добавления rel=“canonical” атрибута на страницы комментариев, за исключением страницы 1. Затем мы подключить эту функцию к wp_head() функции WordPress. Так просто!

Источников:

8. Получить всю должность или страницу в переменной PHP

Screenshot

Проблема.
Будучи в состоянии получить весь текущий пост или страницу в качестве переменной PHP, безусловно, хорошо. Можно, например, заменить части содержимого с помощью str_replace() функции PHP и многое другое.

Решение.
Еще раз, ничего сложного. Просто вставьте следующее в файл function.php.

function callback($buffer) {
  // modify buffer here, and then return the updated code return $buffer;
}

function buffer_start() {
  ob_start("callback");
}

function buffer_end() {
  ob_end_flush();
}

add_action('wp_head', 'buffer_start');
add_action('wp_footer', 'buffer_end');

Объяснение кода.
Для достижения этой взлома, нам нужно три функции:

  • callback(): эта функция возвращает всю страницу в качестве переменной, называемой $buffer . Вы можете изменить его, прежде чем вернуть его с помощью регулярных выражений, например.
  • buffer_start(): эта функция просто запускает буфер. Он подключен к wp_head() функции WordPress.
  • buffer_end(): эта функция очищает буфер. Он подключен к wp_footer() функции WordPress.

Как только мы имеем нашу функцию, мы как раз зацепили его к существуя функциям WordPress.

Источников:

9. Используйте крючки и Крон для расписания событий

Screenshot

Проблема.
Вы, наверное, уже знаете, что WordPress может планировать события. Например, он может публиковать публикации на заданные даты и время. Используя крючки и wp-cron , мы можем легко планировать наши собственные события. В этом примере, мы получим наш блог WordPress, чтобы отправить нам по электронной почте один раз в час.

Решение.
Вставьте следующий блок кода в файл functions.php вашей темы.

if (!wp_next_scheduled('my_task_hook')) {
  wp_schedule_event( time(), 'hourly', 'my_task_hook' );
}

add_action( 'my_task_hook', 'my_task_function' );

function my_task_function() {
  wp_mail('you@yoursite.com', 'Automatic email', 'Hello, this is an automatically scheduled email from WordPress.');
}

Объяснение кода.
Первое, что мы сделали, конечно, было создать функцию, которая выполняет желаемое действие. В этом примере функция my_task_function() вызывается, и она просто отправляет электронное письмо на указанный адрес электронной почты.

Чтобы запланировать событие, мы должны использовать wp_schedule_event() эту функцию. Последний аргумент должен быть крючок, поэтому мы подключить нашу my_task_function() функцию my_task_hook .

Источников:

  • Сроки это все: планирование в WordPress

10. Перечень всех крючковатых функций

Screenshot

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

Решение.
Как и в других, этот код должен быть вставлен в файл functions.php. Когда вы закончите отладку, не забудьте удалить код из functions.php,иначе сообщение отладки будет продолжать появляться.

function list_hooked_functions($tag=false){
 global $wp_filter;
 if ($tag) {
  $hook[$tag]=$wp_filter[$tag];
  if (!is_array($hook[$tag])) {
  trigger_error("Nothing found for '$tag' hook", E_USER_WARNING);
  return;
  }
 }
 else {
  $hook=$wp_filter;
  ksort($hook);
 }
 echo '<pre>';
 foreach($hook as $tag => $priority){
  echo "<br />&gt;&gt;&gt;&gt;&gt;t<strong>$tag</strong><br />";
  ksort($priority);
  foreach($priority as $priority => $function){
  echo $priority;
  foreach($function as $name => $properties) echo "t$name<br />";
  }
 }
 echo '</pre>';
 return;
}

Как только это будет сделано, просто позвоните list_hooked_functions() в функцию, как показано ниже, для печати всех крючковатых функций WordPress на экране.

list_hooked_functions();

Объяснение кода.
Если имя крючка не предоставляется функции в качестве аргумента, то крючки печатаются на экране с помощью глобальной $wp_filter переменной. Кроме того, можно перечислить один конкретный крюк, передавая его имя в качестве атрибута:

list_hooked_functions('wp_head');

Вас могут заинтересовать следующие посты:

Источник: smashingmagazine.com

Великолепный Журнал

Великолепный, сокрушительный, разящий (см. перевод smashing) независимый журнал о веб-разработке. Основан в 2006 году в Германии. Имеет няшный дизайн и кучу крутых авторов, которых читают 2 млн человек в месяц.

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

%d такие блоггеры, как: