Как Hide My Dates в WordPress прячет даты от поисковых систем

Как Hide My Dates в WordPress прячет даты от поисковых систем

Здравствуйте! В этой статье я опишу вам внутренне устройство и принцип работы плагина скрывающего даты «Hide My Dates».

Сам плагин разделен на две части — front end и back end.

В задачу «front end» части (то что видит гость сайта) — входит функция позволяющая прятать даты.

В «back end» (панель администратора) — входит больше информационая часть и немного настроек. Какие в принципе не нужны.

Установка плагина

Открываем файл «/wp-content/plugins/hide-my-dates/hide-my-dates.php», он отвечает за работу данного плагина. В течении всей статьи мы будет работать только с ним.

Во время установки плагина выполняется инициализация первоначальных данных. За это отвечает следующий код:

function hmd_init() {
    $opt_date = '1';
	$opt_modifieddate = '1';
	$opt_comments = '1';
    add_option('hmd_opt_date', $opt_date);
	update_option('hmd_opt_date', $opt_date);
	add_option('hmd_opt_modifieddate', $opt_modifieddate);
	update_option('hmd_opt_modifieddate', $opt_modifieddate);
	add_option('hmd_opt_comments', $opt_comments);
	update_option('hmd_opt_comments', $opt_comments);
}
add_action('activate_hide-my-dates/hide-my-dates.php', 'hmd_init');

Здесь правда мне не понятно, зачем еще нужно было после установки данных в БД через ф-ю «add_option», еще и обновлять эти данные через «update_option». Возможно что автор решил таким образом перестраховаться. А возможно что я еще не знаю о некоторых тонкостях WP.

Плагин — многоязычный, и за подключение языкового файла отвечает код:

function hmd_setup(){
    load_plugin_textdomain('hide-my-dates', null, dirname( plugin_basename( __FILE__ ) ) . '/lang' );
}
add_action('init', 'hmd_setup');

Back End или функционал для администратора

Так как нас интересует админка. Ищем ф-ю отвечающую за вывод пункта меню в WP на страницу настроек плагина. За это отвечает следующий код:

function hdm_menu() {
	add_options_page('Hide My Dates', 'Hide My Dates', 'manage_options', 'hide-my-dates.php', 'hdm_options_page');
}

add_action('admin_menu', 'hdm_menu');

Параметры которые принимает ф-я:

Hide My Dates (первый) — title страницы отображаемый при переходе на страницу плагина;
Hide My Dates (второй) — название пункта меню плагина в разделе меню «Настройки»;
manage_options — уровень доступа к функционалу плагина;
hide-my-dates.php — уникальный идентификатор пункта меню. Он нам может пригодиться если мы будет использовать вложенные пункты меню;
hdm_options_page — клабэк ф-я отвечающая за функционал срабатывающий при переходе на страницу плагина.

В «add_options_page» нас интересует последний параметр - «hdm_options_page». Это функция отвечающая за формирования страницы с настройками. Содержимое ф-и можно найти выше. Код ее полностью дублировать не буду, приведу лишь важные части:

/* Отвечает за получение настроек из БД */
$opt_date = get_option('hmd_opt_date');
$opt_modifieddate = get_option('hmd_opt_modifieddate');
$opt_comments = get_option('hmd_opt_comments');

/* …...... */

/* Если были получены POST данные (т. е. данные формы были отправлены на сервер), то сработает условие ниже и отобразиться соответствующее предупреждение */
<?php if ( !empty($_POST ) ) : ?>
<div id="message" class="updated fade"><p><strong><?php _e('Options saved.', "hide-my-dates") ?></strong></p></div>
<?php endif; ?>
<div class="wrap">

/* …...... */

/* Собственно настройки */
            <tr>
                <th><?php _e("Hide date", "hide-my-dates") ?></th><td><input type="checkbox" name="opt_date" value="1" <?php if ($opt_date == '1') echo "checked='checked'"; ?> /> <?php _e("Post creation date (the_date or the_time) will be hidden from Google.", "hide-my-dates"); ?></td>
            </tr>
			<tr>
                <th><?php _e("Hide modified date", "hide-my-dates") ?></th><td><input type="checkbox" name="opt_modifieddate" value="1" <?php if ($opt_modifieddate == '1') echo "checked='checked'"; ?> /> <?php _e("The last modification date (the_modified_date or the_modified_time) will be hidden from Google.", "hide-my-dates"); ?></td>
            </tr>
			<tr>
                <th><?php _e("Hide dates of comments", "hide-my-dates") ?></th><td><input type="checkbox" name="opt_comments" value="1" <?php if ($opt_comments == '1') echo "checked='checked'"; ?> /> <?php _e("Comment creation dates will be hidden from Google.", "hide-my-dates") ?></td>
            </tr>

Честно сказать, из-за не опытности долго думал и не мог понять где же обновляются настройки. В изучаемых примерах для этого использовалась ф-я «register_setting». Ее то я и искал, но все оказалось гораздо проще (возьму себе на заметку). И за это отвечает следующий код:

$pluginpage = $_SERVER["REQUEST_URI"];
if(strpos($pluginpage, 'hide-my-dates.php') == true){
if ( isset($_POST['submit']) ) {
	if (!isset($_POST['opt_date'])) $opt_date = '0'; else $opt_date = '1';
    if (!isset($_POST['opt_modifieddate'])) $opt_modifieddate = '0'; else $opt_modifieddate = '1';
	if (!isset($_POST['opt_comments'])) $opt_comments = '0'; else $opt_comments = '1';
    update_option('hmd_opt_date', $opt_date);
	update_option('hmd_opt_modifieddate', $opt_modifieddate);
	update_option('hmd_opt_comments', $opt_comments);
}}

Здесь мы проверяем, какой файл сработал, и если это был «hide-my-dates.php» (т. е. файл плагина) — значит можно обновить данные. А через «$_POST['submit']», мы проверяем, была ли обновлена форма. Код:

if(strpos($pluginpage, 'hide-my-dates.php') == true){
if ( isset($_POST['submit']) ) {

На этом, работа с админкой закончена.

Front End или функционал гостя сайта

Второе что мне не нравится в данном плагине — это фай стилей. К чему, он понять не могу, ведь это лишний запрос к серверу. За подключение файла отвечает код:

function hmd_stylesheet() {
	$purl = plugins_url();
    $myStyleUrl = $purl . '/hide-my-dates/hide-my-dates.css';
    wp_register_style('hide-my-dates', $myStyleUrl);
    wp_enqueue_style( 'hide-my-dates');
}
add_action('wp_print_styles', 'hmd_stylesheet');

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

add_filter('get_the_time', 'hide_date');
add_filter('get_the_date', 'hide_date');

add_filter('get_the_modified_time', 'hide_modifieddate');
add_filter('get_the_modified_date', 'hide_modifieddate');

add_filter('get_comment_date', 'hide_comments');
add_filter('get_comment_time', 'hide_comments');

А за «скрытие» дат отвечает следующий код:

function hide_date($tdate = '') {
if ( !is_admin() ) {
	$opt_date = get_option('hmd_opt_date');
	if ($opt_date == &quot;1&quot;) {
		$tdate = '&lt;span class=&quot;sdata&quot; title=&quot;' .  $tdate . '&quot;&gt;&lt;/span&gt;';
	}
	}
return $tdate;
}

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

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

А теперь наверное самое интересное, как же все таки прячутся даты. Я если честно, думал что они спрятаны с использованием jQuery. Но все оказалось проще и быстрее. Все реализовано благодаря CSS:

.sdata:before{content:attr(title);}

Здесь, благодаря псевдоэлементу «before» мы добавляем до содержимого элемента SPAN содержимое его атрибута «title».

Благодаря свойству «content» мы можем добавить в HTML страницу нужный текст.

А используя attr мы можем обратиться к любому атрибуту нашего элемента.

Вот так все просто — обратились благодаря CSS к нужному атрибуту, и добавили через псевдокласс в нужный нам SPAN дату.

На этом все. Удачного дня!

Поделиться в соцсетях:
Статьи на похожую тематику

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

Комментарии
  1. Flector

    is_admin это условный тег, проверяющий открытие админки сайта. иначе даты в самой админке будут выводиться криво.

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

    ответить
    1. Pavel
      16.05.2015 в 06:45 автор блога

      Рад видеть Вас Flector на своем сайте. Честно сказать приятно. Надеюсь я Вас не обидел этим постом 🙂 (могу подправить если хотите)

      а поводу времени на разработку плагина — на само написание плагина ушло несколько часов, но вот на поиски способа скрытия дат и на его тестирование ушло несколько недель.

      Я поначалу подумал что даты прячутся с использованием jQuery и атрибута "data", но когда попытался выделить дату - был удивлен.

      пожертвований еще не получал 🙂 это так, для красоты — бокс этот увидел в одном плагине и мне он понравился

      Думаю что отечественный пользователь не оценит Ваших стараний, тут нужно работать с аудиторией из запада, они мне кажется по щедрее будут. Сам подобным занимался, но за год или два получил лишь 25 рублей :). Мелочь, но все равно приятно.

      Можно поинтересоваться, какие еще плагины были Вами разработаны?

      ответить
      1. Flector

        https://profiles.wordpress.org/flector#content-plugins

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

        ответить
        1. Pavel
          20.05.2015 в 01:10 автор блога

          Спасибо! обязательно гляну.
          Зашел только что на Ваш сайт. Был приятно удивлен, что это был один из первых сайтов с которого я начал изучать WP.

          ответить
Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *