Як 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 сайтом проблеми? потрібний додатковий функціонал? нестандартний плагін чи згорнути нову сторінку?
Тоді напишіть мені через форму зворотного зв'язку, і я намагатимусь вам допомогти.

Напишіть коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *