Продолжительность чтения поста. Шорткод WordPress.
Несколько дней назад я увидел веб-сайт, на котором вверху страницы содержалась дополнительная информация: приблизительное время чтения страницы. Мне это показалось забавным, и я захотел создать что-то подобное, используя шорткод WordPress.
Сделать это довольно легко, так что приступим!
Шаг 1: Создайте плагин
Как обычно, мы собираемся создать плагин, поэтому создайте новую папку в wp-content/plugins и назовите ее «post-reading-duration-shortcode», откройте его и создайте файл с именем «post-reading-duration-shortcode.php». Откройте файл и вставьте этот код:
<?php
/*
Plugin Name: Post Reading Duration Shortcode
Plugin URL: http://remicorson.com/
Description: Display the estimated time to read the post
Version: 0.1
Author: Remi Corson
Author URI: http://remicorson.com
Contributors: corsonr
Text Domain: rc_prds
Domain Path: languages
*/
После сохранения файла вы должны увидеть список плагинов на странице плагинов.
Шаг 2. Создайте шорткод
По сути, плагин предоставляет простой короткий код без атрибутов. Текст будет инкапсулирован между самими тегами шорткода. Шорткод будет отображать на веб-интерфейсе время, необходимое посетителям для прочтения сообщения. Чтобы создать шорткод, используйте этот код:
/**
* Register the shortcode
*
* @access public
* @since 1.0
* @return void
*/
function rc_prds_add_reading_duration_shortcode( $atts, $content = null ) {
return '<span class="reading_duration">'.$content.'</span>';
}
add_shortcode("reading_duration", "rc_prds_add_reading_duration_shortcode");
Вы можете сохранить файл. Если вы добавите в сообщение или на страницу короткий код [reading_duration]Расчетное время чтения: XX[/reading_duration], он должен отобразить «Расчетное время чтения: XX», инкапсулированное в тег «span».
Следующим шагом является изменение короткого кода для отображения реального расчетного времени, необходимого для чтения страницы или сообщения, в соответствии с заранее определенным количеством слов, прочитанных в минуту.
Для этого нам нужно улучшить код короткого кода. Нам нужно получить идентификатор сообщения (чтобы получить количество слов в сообщении с помощью str_word_count()), и нам нужно определить количество слов, которые люди обычно читают за одну минуту. Допустим, 200 слов в минуту.
/**
* Register the shortcode
*
* @access public
* @since 1.0
* @return void
*/
function rc_prds_add_reading_duration_shortcode( $atts, $content = null ) {
global $post;
// Get Post ID
$post_id = $post->ID;
// Words read per minute (you can set your own value)
$words_per_minute = 200;
// Get estimated time
$estimated_reading_time = rc_prds_get_post_reading_time( $post_id, $words_per_minute );
return '<span class="reading_duration">'.$content.' '.$estimated_reading_time.'</span>';
}
add_shortcode("reading_duration", "rc_prds_add_reading_duration_shortcode");
Шаг 3: Функция счетчика
Как видите, есть неопределенная функция: rc_prds_get_post_reading_time(). Это функция, которая вернет примерное время, необходимое вам для прочтения поста. Давайте создадим его:
/**
* Get post reding time
*
* @access public
* @since 1.0
* @return void
*/
function rc_prds_get_post_reading_time( $post_id, $words_per_minute ){
// Get post's words
$content = get_the_content( $post_id );
$count_words = str_word_count( strip_tags( $content ) );
// Get Estimated time
$minutes = floor( $count_words / $words_per_minute);
$seconds = floor( ($count_words / ($words_per_minute / 60) ) - ( $minutes * 60 ) );
// If less than a minute
if( $minutes < 1 ) {
$estimated_time = __( 'Less than a minute', 'rc_prds' );
}
// If more than a minute
if( $minutes >= 1 ) {
if( $seconds > 0 ) {
$estimated_time = $minutes.__( 'min', 'rc_prds' ).' '.$seconds.__( 'sec', 'rc_prds' );
} else {
$estimated_time = $minutes.__( 'min', 'rc_prds' );
}
}
return $estimated_time;
}
По сути, функция подсчитывает количество слов в get_the_content(), а затем подсчитывает количество минут и секунд, необходимых для прочтения сообщения. Последняя часть — это простой способ отобразить правильное сообщение в зависимости от значений $минут и $секунд.
Мы могли бы пойти дальше и добавить часы, необходимые для прочтения поста, но я не уверен на 100%, что это обязательно!
Теперь вы можете полностью использовать шорткод, просто добавив:
[reading_duration]Estimated Reading Time:[/reading_duration]