Выпадающее меню в WordPress

В мобильной версии темы WordPress Twenty Fifteen сайдбар используется в виде выпадающего меню, которое отображается при нажатии на кнопку. Чтобы показать или скрыть меню используется JavaScript, который в свою очередь использует библиотеку jQuery.

Как я уже писал раньше, я поставил себе цель полностью выпилить jQuery из стандартной темы оформления Twenty Fifteen. Сначала перенес на CSS спойлер, который ранее работал на JavaScript и jQuery. И вот сейчас руки дошли до выпадающего меню в WordPress.

Для начала нужно полностью отключить загрузку jQuery, добавьте в файл в functions.php:

function wpdocs_dequeue_script() {
    wp_dequeue_style('jquery');
    wp_deregister_script('jquery');
}
add_action( 'wp_print_scripts', 'wpdocs_dequeue_script' );

Чтобы показать или скрыть выпадающее меню при нажатии на кнопку, добавьте JavaScript ниже в файл footer.php:

<script type="text/javascript">
    var dropdownButton = document.getElementById("dropdown"),
    dropdownDiv = document.getElementById("secondary");

    dropdownButton.addEventListener("click", function () {
        dropdownButton.classList.toggle("toggled-on");
        dropdownDiv.classList.toggle("toggled-on");

    if (dropdownButton.getAttribute("aria-expanded") == 'false') {
        dropdownButton.setAttribute("aria-expanded", "true");
        dropdownDiv.setAttribute("aria-expanded", "true");
    }
    else {
        dropdownButton.setAttribute("aria-expanded", "false");
        dropdownDiv.setAttribute("aria-expanded", "false");
    }
});
</script>

Преимущества данного скрипта — нет необходимости подгружать jQuery. К недостаткам можно отнести то, что данный скрипт не работает в Opera Mini по причине отсутствия поддержки classList. Возможно, в будущем перепишу выпадающее меню на CSS, но сейчас не хочу заморачиваться.

JavaScript класс элемента

В этой записи я расскажу как с помощью JavaScript добавить или изменить атрибут class для элементов страницы. Часто этот метод используют для создания динамических элементов страницы. Чтобы в JavaScrip добавить, удалить, переключить или проверить класс элемента используют методы, которые содержит свойство classList:

  • classList.add
  • classList.remove
  • classList.toggle
  • classList.contains
  • classList.length
  • classList.item

Добавить класс

classList.add — добавить класс элемента.

Синтаксис:

element.classList.add(name);
  • name — имя класса.

В примере я использую метод classList.add чтобы добавить класс style для для элемента <div>:

<div id="div1">Hello World</div>

<script>
var div1 = document.getElementById("div1");
div1.classList.add("style");
</script>

Удалить класс

classList.remove — удалить класс элемента.

Синтаксис:

element.classList.remove(name);
  • name — имя класса.

В примере я использую метод classList.remove чтобы удалить класс style для для элемента <div>:

<div id="div1" class="style">Hello World</div>

<script>
var div1 = document.getElementById("div1");
div1.classList.remove("style");
</script>

Переключить класс

classList.toggle — добавить имя класса, если его нет, или удалить, если он есть.

Синтаксис:

element.classList.toggle(name);
  • name — имя класса.

В примере я использую метод classList.toggle чтобы добавить класс style для для элемента <div>:

<div id="div1">Hello World</div>

<script>
var div1 = document.getElementById("div1");
div1.classList.toggle("style");
</script>

Или удалить класс style, если он есть:

<div id="div1" class="style">Hello World</div>

<script>
var div1 = document.getElementById("div1");
div1.classList.toggle("style");
</script>

Проверить наличие класса

classList.contains — возвращает логическое значение, указывающее, имеет ли элемент указанный класс или нет.

Синтаксис:

element.classList.contains(name);
  • name — имя класса.

В примере я использую метод classList.contains чтобы добавить класс style для для элемента <div>:

<div id="div1" class="style">Hello World</div>

<script>
var div1 = document.getElementById("div1");
alert(div1.classList.contains("style"));
</script>

Количество классов

classList.length — возвращает количество классов в элементе.

Синтаксис:

element.classList.length;

В примере я использую метод classList.length чтобы получить количество классов для для элемента <div>:

<div id="div1" class="style1 style2">Hello World</div>

<script>
var div1 = document.getElementById("div1");
alert(div1.classList.length);
</script>

Узнать имя класса

classList.item — возвращает имя класса по его порядковому номеру.

Синтаксис:

element.classList.item(number);
  • number — порядковый номер класса.

В примере я использую метод classList.item чтобы получить имя класса по его порядковому:

<div id="div1" class="style1 style2">Hello World</div>

<script>
var div1 = document.getElementById("div1");
alert(div1.classList.item(0));
</script>

JavaScript атрибут элемента

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

  • setAttribute
  • getAttribute
  • hasAttribute
  • removeAttribute

Добавить или изменить атрибут

setAttribute — функция добавляет новый атрибут или изменяет значение существующего атрибута по указанному элементу.

Синтаксис функции:

element.setAttribute(name, value);
  • name — задает имя атрибута.
  • value — указывает новое значение атрибута.

В примере я использую функцию setAttribute чтобы добавить атрибут disabled для элемента <button>:

<button id="btn">Hello World</button>

<script>
var b = document.querySelector("#btn");
b.setAttribute("disabled", "disabled");
</script>

Получить значение атрибута

getAttribute — функция вернет значение указанного атрибута элемента.

Синтаксис функции:

var attribute = element.getAttribute(attributeName);
  • attribute — строка содержащая значение атрибута.
  • attributeName — имя атрибута, значение которого вы хотите получить.

В примере я использую функцию getAttribute чтобы получить значение атрибута элемента <div>:

<div id="div1" align="center">Hello World</div>

<script>
var div1 = document.getElementById("div1");
var align = div1.getAttribute("align");

alert(align);
</script>

Проверить наличие атрибута

hasAttribute — метод возвращает логическое значение, указывающее, имеет ли элемент указанный атрибут или нет.

Синтаксис функции:

var result = element.hasAttribute(attName);
  • result — значение true или false.
  • AttName — задает имя атрибута.

В примере я использую функцию hasAttribute чтобы проверить наличие атрибута align="center" для элемента <div>:

<div id="div1" align="center">Hello World</div>

<script>
var d = document.getElementById("div1");

if (d.hasAttribute("align")) {
    alert("align center");
}
</script>

Удалить атрибут

removeAttribute — удаляет атрибут из указанного элемента.

Синтаксис функции:

element.removeAttribute(attrName);
  • attrName — строка с именем атрибута, который нужно удалить.

В примере я использую функцию removeAttribute чтобы удалить атрибут align="center" для элемента <div>:

<div id="div1" align="center">Hello World</div>

<script>
document.getElementById("div1").removeAttribute("align");
</script>

Cпойлер в WordPress на CSS

В этой записи я расскажу как сделать спойлер в WordPress на чистом HTML и CSS. Предпосылкой для написания этой статьи стало желание полностью отказаться от использования библиотеки jQuery, которая по умолчанию используется в стандартной теме WordPress Twenty Fifteen.

Стандартная тема WordPress Twenty Fifteen использует библиотеку jQuery для отображения блока сайдбара в мобильной версии сайта. Функционал не настолько сложный, чтобы ради него подключать jQuery. Поэтому, было принято решение полностью выпилить jQuery из содержимого шаблона.

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

Текст спойлера

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

function showhide_shortcode ($atts, $content = null) {
    $attributes = shortcode_atts (array('text' => 'Спойлер'), $atts );

    $output = '<span class="spoiler"> 
        <label for="spoiler">' . $attributes['text'] . '</label>
        <input type="checkbox" id="spoiler">';
    $output .= '<div class="spoiler_text">'. do_shortcode( $content ) .'</div>
        </span>';

return $output;
}
add_shortcode ('spoiler', 'showhide_shortcode');

Чтобы добавить спойлер в WordPress используйте шорткод [spоiler] для области, которую хотите скрыть. Через параметр text можно изменить текст, который будет отображаться в заголовке спойлера.

[spоiler text="Заголовок спойлера"]Текст[/spоiler]

За отображение данных под спойлером добавьте в файле style.css:

.spoiler label {
    color: #0060a0;
    border-bottom: 1px dashed rgba(0,96,160,.2);
    cursor:pointer;
}
.spoiler input {
    display: none;
}
.spoiler_text {
    display: none;
}
.spoiler input[type=checkbox]:checked + .spoiler_text {
    display: block;
}

Теперь, вам остается только подправить стили под дизайн вашего сайта.

WordPress версия стилей и скриптов

Достаточно часто приходится вносить изменения в дизайн сайта. Если не обновить файлы стилей в кэше браузера, можно столкнуться с проблемой некорректного отображения сайта. Если администратор сайта легко решит проблему нажатием славишь Alt+F5. То как быть с другими посетителями сайта, которые понятия не имеют, что сегодня администратор неожиданно решил обновить дизайн.

Причина данной проблемы связана с заголовком Cache-Control, который веб-сервер передает вашему браузеру во время загрузки файла:

Cache-Control: max-age=86400

Директива указывает браузеру хранить копию файлов в кэше в течение суток. Таким образом, до завтрашнего дня посетитель будет любоваться съехавшей версткой. Вы можете уменьшить значение директивы max-age, хотя сути проблемы это не решает.

Полный отказ от кэширования:

Cache-Control: no-cache

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

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

Единственным правильным выходом из данной ситуации будет указывать версию для CSS и JS файлов:

<link rel="stylesheet" href="https://codebeer.ru/style.css?ver=4.4" type="text/css" />

Но согласитесь, менять версию файла при каждом изменении не совсем удобно. Для WordPress я предлагаю использовать специальную функцию, которая будет автоматически добавлять в параметр ver CRC32 хеш-код файла:

function wpdocs_dequeue_script() {
    wp_register_script('jquery', get_template_directory_uri() . '/jquery.min.js', false, hash_file('crc32', get_stylesheet_directory() . '/style.css'), true);
    wp_enqueue_script('jquery');
}

Функция, которая задает версию по умолчанию для всех подключаемых файлов:

function my_wp_default_styles($styles) {
    $styles->default_version = hash_file('crc32', get_stylesheet_directory() . '/style.css');
}
add_action("wp_default_styles", "my_wp_default_styles");

Как вариант, вместо хэша можно использовать дату изменения файла:

function my_wp_default_styles($styles) {
    $styles->default_version = filemtime(get_stylesheet_directory() . '/style.css' );
}
add_action("wp_default_styles", "my_wp_default_styles");

Определить код символа

В данной записи я расскажу как определить код символа с помощью обычного текстового редактора Microsoft Word. Получить код символа может понадобится в процессе работы с CSS, для того чтобы указать свойство content. В качестве значения данного свойства используются коды символов Unicode.

Определить код символа в Word

Для примера попробуем найти код символа код символа точка. Сначала откроем чистый документ Word и добавим в него символ точки ., теперь чтобы получить код символа Unicode необходимо выделить один символ и затем нажать сочетание клавиш Alt+X.

Для примера определим код символа точка. Для начала откроем чистый документ Word и добавим в него символ точки ., теперь чтобы получить код символа Unicode необходимо выделить один символ и затем нажать сочетание клавиш Alt+X.

Код символа точка в формате Unicode 002E. Чтобы указать свойство content в CSS, необходимо просто добавить обратный слэш:

.dropdown-toggle:after {
	content: "\002E";
}

Таблица кодов символов

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

Настроить редирект в WordPress

Для перенаправления в WordPress можно использовать встроенный в ядро редирект. Настроить редирект в WordPress с помощью функций: wp_redirect() и wp_safe_redirect(). Разница между этими функциями состоит в том, что wp_safe_redirect() дополнительно проверяет адрес в списке разрешенных хостов.

Пример как настроить 301 редирект в WordPress:

function redirect_to_home($query) {
    if(is_author()) {
         wp_redirect(home_url(), 301);
         exit;
     }
}
add_action('parse_query', 'redirect_to_home');

При переходе по адресу https://codebeer.ru/author/admin, WordPress выполнит редирект на главную страницу сайта.

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

Оснастка Active Directory

Дата: 17.12.2015Метки:

Для работы с оснасткой Active Directory в системах Windows 7/8/10, вам понадобится предварительно установить набор утилит Microsoft Remote Server Administration Tools (RSAT) или Средства удаленного администрирования сервера в русской локализации Windows. RSAT работает как клиент Active Directory и позволяет управлять Windows Server через специальную оснастку.

Для установки оснастки Active Directory в операционных системах Windows 7/8/10, необходимо предварительно скачать и установить RSAT. Для этого перейдите по одной из ссылок ниже:

  • RSAT для Windows 7
  • RSAT для Windows 8
  • RSAT для Windows 8.1
  • RSAT для Windows 10

После установки RSAT, большинство функций управления отключены. Для запуска оснастки Active Directory активируйте компонент «AD DS and AD LDS Tools» в панели управления:

"Control Panel" - "Programs and Features" - "Turn Windows features on or off"

Перейдите в раздел:

"Remote Server Administration Tools" - "Role Administration Tools"

И выберите «AD DS and AD LDS Tools» чтобы установить оснастку Active Directory.

Отключить REST API в WordPress

Начиная с WordPress 4.4 в ядро CMS добавлена поддержка REST API. Поддержка REST API выводит функционал WordPress совершенно на новый уровень, но в данный момент в большинстве случаев нет никакой необходимости. Чтобы отключить REST API в WordPress, необходимо просто добавить в файл functions.php соответствующие фильтры.

Отключить сам REST API:

add_filter('rest_enabled', '__return_false');

Отключить фильтры REST API:

remove_action('xmlrpc_rsd_apis', 'rest_output_rsd');
remove_action('wp_head', 'rest_output_link_wp_head', 10, 0);
remove_action('template_redirect', 'rest_output_link_header', 11, 0);
remove_action('auth_cookie_malformed', 'rest_cookie_collect_status');
remove_action('auth_cookie_expired', 'rest_cookie_collect_status');
remove_action('auth_cookie_bad_username', 'rest_cookie_collect_status');
remove_action('auth_cookie_bad_hash', 'rest_cookie_collect_status');
remove_action('auth_cookie_valid', 'rest_cookie_collect_status');
remove_filter('rest_authentication_errors', 'rest_cookie_check_errors', 100);

Отключить события REST API:

remove_action('init', 'rest_api_init');
remove_action('rest_api_init', 'rest_api_default_filters', 10, 1);
remove_action('parse_request', 'rest_api_loaded');

Отключить Embeds связанные с REST API:

remove_action('rest_api_init', 'wp_oembed_register_route');
remove_filter('rest_pre_serve_request', '_oembed_rest_pre_serve_request', 10, 4);

Установить Disqus в WordPress

Для установки Disqus в WordPress можно использовать официальный плагин Disqus Comment System. И хотя это самый простой вариант, он подходит не для всех сайтов. Для некоторых шаблонов WordPress этот плагин работает некорректно. В результате, после установки Disqus в WordPress, блок комментариев ломает дизайн.

Поэтому, вместо использования плагина, гораздо удобнее добавить код Disqus непосредственно в файл темы WordPress. Предварительно удалите из вашего шаблона WordPress весь код, который отвечает за вывод встроенных комментариев WordPress. Затем добавьте в файл functions.php код функции ниже:

function disqus_embed() {
global $post;
$disqus_shortname = 'DISQUS_NAME';
echo '<div id="disqus_thread"></div>
<script>
var disqus_config = function () {
this.page.url = "'.get_permalink($post->ID).'";
this.page.identifier = "'.$disqus_shortname.'-'.$post->ID.'";
};
(function() {
var d = document, s = d.createElement("script");

s.src = "//'.$disqus_shortname.'.disqus.com/embed.js";

s.setAttribute("data-timestamp", +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>';
}

Замените DISQUS_NAME на ваш идентификатор в Disqus. Для вывода блока комментариев, необходимо добавить в файл comments.php:

<?php if (comments_open()) : ?>
<?php disqus_embed(); ?>
<?php endif;?>