Если вы когда-нибудь хотели изменить формат времени комментариев WordPress, то я покажу вам простой трюк для этого. Чтобы отобразить время комментария в удобном для пользователя формате wordpress «время назад», можно использовать два подхода.
- Изменить дату комментариев wordpress с помощью фильтра
- Переопределение разметки комментариев, чтобы вы могли изменить вывод комментариев по своему усмотрению.
Изменить вывод даты комментария с помощью фильтра
Этот метод позволяет вам подключиться к выводу времени комментария с простой функцией, чтобы переопределить отображение времени. Вы можете использовать его для подключения к любому шаблону, вам просто нужно скопировать следующую функцию в свой файл functions.php вашей дочерней темы:
1 2 3 4 5 6 7 8 9 10 11 12 | /** * Modify the comment date of the current comment. * * @param string $d Optional. The format of the date. Default user's setting. * @param int|WP_Comment $comment_ID WP_Comment or ID of the comment for which to get the date. * Default current comment. * @return string The comment's date. */ function pressfore_comment_time_output($date, $d, $comment){ return sprintf( _x( '%s ago', '%s = human-readable time difference', 'your-text-domain' ), human_time_diff( get_comment_time( 'U' ), current_time( 'timestamp' ) ) ); } add_filter('get_comment_date', 'pressfore_comment_time_output', 10, 3); |
Мы подключаемся к get_comment_date
фильтру, который возвращает результат в формате времени комментария. Этот фильтр принимает 3 параметра, но мы не будем их использовать, так как мы заменяем старый формат новым. То, что мы возвращаем, — это функция WordPress, созданная давным-давно, которая создаст желаемый формат — исходную страницу кодекса WordPress .
Минусы этого подхода могут заключаться в том, что он влияет только на время комментариев, но не на разметку даты. Рядом со временем будут другие данные, в зависимости от текущей темы, которую вы используете. Поэтому, если вы не хотите, чтобы больше данных отображалось рядом с вашим новым форматом wordpress «time ago», вы можете перейти ко второму методу — переопределению разметки комментариев WordPress.
Переопределение разметки комментариев WordPress
Этот подход позволит вам полностью редактировать вывод комментариев WordPress или только ту часть, которую вы хотите.
Это разметка комментариев WordPress по умолчанию (html5), взятая из Walker_Comment
класса. Но если вы используете какую-то тему, которая уже изменяет вывод комментариев, вам нужно будет переопределить эту функцию. Лучше всего это сделать в дочерней теме WordPress, вам просто нужно выполнить поиск в вашей текущей теме, где включена функция, аналогичной приведенной ниже.
Итак, чтобы изменить комментарии WordPress, используйте эту функцию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | /** * Outputs a modified comment markup. * * * @see wp_list_comments() * * @param WP_Comment $comment Comment to display. * @param int $depth Depth of the current comment. * @param array $args An array of arguments. */ function pressfore_modify_comment_output( $comment, $depth, $args ) { $tag = ( 'div' === $args['style'] ) ? 'div' : 'li'; ?> <<?php echo $tag; ?> id="comment-<?php comment_ID(); ?>" <?php comment_class( empty( $args['has_children'] ) ? '' : 'parent', $comment ); ?>> <article id="div-comment-<?php comment_ID(); ?>" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <?php if ( 0 != $args['avatar_size'] ) echo get_avatar( $comment, $args['avatar_size'] ); ?> <?php /* translators: %s: comment author link */ printf( __( '%s <span class="says">says:</span>' ), sprintf( '<b class="fn">%s</b>', get_comment_author_link( $comment ) ) ); ?> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="<?php echo esc_url( get_comment_link( $comment, $args ) ); ?>"> <time datetime="<?php comment_time( 'c' ); ?>"> <?php printf( _x( '%s ago', '%s = human-readable time difference', 'your-text-domain' ), human_time_diff( get_comment_time( 'U' ), current_time( 'timestamp' ) ) ); ?> </time> </a> <?php edit_comment_link( __( 'Edit' ), '<span class="edit-link">', '</span>' ); ?> </div><!-- .comment-metadata --> <?php if ( '0' == $comment->comment_approved ) : ?> <p class="comment-awaiting-moderation"><?php _e( 'Your comment is awaiting moderation.' ); ?></p> <?php endif; ?> </footer><!-- .comment-meta --> <div class="comment-content"> <?php comment_text(); ?> </div><!-- .comment-content --> </article><!-- .comment-body --> <?php } |
Эту функцию нужно добавить в functions.php вашей дочерней темы. Затем вам нужно вызвать эту функцию как функцию обратного вызова из wp_list_comments()
функции. Эта функция обычно вызывается внутри comments.php
. Поэтому вам нужно будет скопировать этот шаблон из родительской функции и изменить его из дочерней темы. Таким образом, вы также можете проверить, есть ли в теме WordPress уже написанная пользовательская функция для редактирования комментариев WordPress. Вы увидите это, проверив, есть ли 'callback'
параметр, переданный в аргументах внутри этой функции. Если нет, вы можете передать его с помощью следущего кода:
1 | wp_list_comments("callback=pressfore_modify_comment_output"); |
Вы можете узнать больше об этой функции здесь — https://codex.wordpress.org/Function_Reference/wp_list_comments.
Вывод
Итак часть, которую нужно будет изменять, находится внутри тега time
. Это часть, которая изменена —
1 2 3 4 5 | <time datetime="<?php comment_time( 'c' ); ?>"> <?php printf( _x( '%s ago', '%s = human-readable time difference', 'your-text-domain' ), human_time_diff( get_comment_time( 'U' ), current_time( 'timestamp' ) ) ); ?> </time> |
Вместо стандартного:
1 2 3 4 5 6 | <time datetime="<?php comment_time( 'c' ); ?>"> <?php /* translators: 1: comment date, 2: comment time */ printf( __( '%1$s at %2$s' ), get_comment_date( '', $comment ), get_comment_time() ); ?> </time> |
Если вы найдете эту статью полезной, не забудьте поделиться ею. И если у вас есть какие-либо вопросы как изменить дату комментариев wordpress, напишите в комментариях ниже. Спасибо за прочтение