Привіт! У цій статті я опишу вам внутрішній пристрій та принцип роботи плагіна приховує дати «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 == "1") {
$tdate = '<span class="sdata" title="' . $tdate . '"></span>';
}
}
return $tdate;
}
логіка дуже проста - якщо сторінку переглядає не адміністратора, отримуємо налаштування з БД. Перевіряємо, чи дозволено ховати дати такого типу — отже, прямими. А якщо ні, то відображаємо як є — текстом/цифрами.
Всі інші хуки працюють аналогічно, тільки з БД беруться інші налаштування, а в тегу SPAN використовують інші класи.
А тепер напевно найцікавіше, як же таки ховаються дати. Я якщо чесно, думав, що вони сховані з використанням jQuery. Але все виявилося простіше та швидше. Все реалізовано завдяки CSS:
.sdata:before{content:attr(title);}
Тут завдяки псевдоелементу «before» ми додаємо до вмісту елемента SPAN вміст його атрибуту «title».
Завдяки властивості "content" ми можемо додати в HTML сторінку потрібний текст.
А використовуючи attr, ми можемо звернутися до будь-якого атрибуту нашого елемента.
Ось так все просто - звернулися завдяки CSS до потрібного атрибуту, і додали через псевдоклас у потрібну дату SPAN.
На цьому все. Вдалого дня!
