Несколько полезных трюков для файла функций темы в WordPress
WordPress является великолепной платформой, предлагая надежную разработку и бесконечные настройки. Используя данную cms, я узнал несколько полезных трюков, которыми хочу поделиться с Вами:
1. Удаляем поле URL в форме комментариев.
add_filter('comment_form_default_fields', 'my_remove_url');
function my_remove_url($arg) {
$arg['url'] = '';
return $arg;
}
2. В административной части блога показываем автору только его записи.
add_filter('parse_query', 'my_parse_query_useronly' );
function my_parse_query_useronly( $wp_query ) {
if ( strpos( $_SERVER[ 'REQUEST_URI' ], '/wp-admin/edit.php' ) !== false ) {
if ( !current_user_can( 'level_10' ) ) {
global $current_user;
$wp_query->set( 'author', $current_user->id );
}
}
}
3. Запрещаем авторам обновлять и удалять записи после определенного периода.
В примере используется период в 7 дней.
add_filter( 'user_has_cap', 'my_limit_editing', 10, 3 );
function my_limit_editing( $allcaps, $cap, $args ) {
if( 'edit_post' != $args[0] && 'delete_post' != $args[0]
|| !empty( $allcaps['manage_options'] )
|| empty( $allcaps['edit_posts'] ) )
return $allcaps;
$post = get_post( $args[2] );
if( 'publish' != $post->post_status )
return $allcaps;
if( strtotime( $post->post_date ) < strtotime( '-7 day' ) ) {
$allcaps[$cap[0]] = false;
}
return $allcaps;
}
4. Узнаем время последнего посещения блога автором по его логину.
add_action('wp_login','author_last_login');
function author_last_login($login) {
global $user_ID;
$user = get_user_by('login', $login);
update_user_meta($user->ID, 'last_login', current_time('mysql'));
}
Пример:
$last_login = get_user_meta($user_id, 'last_login', true);
if ( !empty($last_login) ) { echo $last_login; }
5. Используем jQuery c Яндекса.
Заменяем <номер версии=""> на номер нужной Вам версии jQuery.номер>
add_action('wp_enqueue_scripts','load_jquery_from_yandex');
function load_jquery_from_yandex() {
if( !is_admin() ){
wp_deregister_script('jquery-core');
wp_register_script('jquery-core', 'http://yandex.st/jquery/<номер версии>/jquery.min.js', false, '');
}
}
6. Добавляем колонку с ID пользователей во вкладку «Пользователи» в админке.
add_filter('manage_users_columns', 'show_user_id_column');
add_action('manage_users_custom_column', 'show_user_id_column_content', 10, 3);
function show_user_id_column( $columns ) {
$columns['user_id'] = 'ID';
return $columns;
}
function show_user_id_column_content($value, $column_name, $user_id) {
if ( 'user_id' == $column_name )
return $user_id;
return $value;
}
7. Используем SSL на определеных страницах.
В примере используется страница с номером ID 773.
add_action('template_redirect', 'force_ssl');
function force_ssl()
{
if (is_page(773) && !is_ssl () )
{
header('HTTP/1.1 301 Moved Permanently');
header("Location: https://" . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]);
exit();
}
else if (!is_page(773) && is_ssl() )
{
header('Location: http://' . $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']);
exit();
}
}
8. Запрещаем комментарии на attachments страницах.
add_filter( 'comments_open', 'filter_media_comment_status', 10 , 2 );
function filter_media_comment_status( $open, $post_id ) {
$post = get_post( $post_id );
if( $post->post_type == 'attachment' ) {
return false;
}
return $open;
}
9. Следующая / предыдущая запись автора.
function get_prev_post_by_author($link="« %link", $title="%title") {
global $wpdb, $post;
$authorid = $post->post_author;
$prev = $wpdb->get_row($wpdb->prepare("SELECT ID, post_title FROM $wpdb->posts WHERE post_type='post' AND post_status='publish' AND post_author= %d AND post_date < '".$post->post_date."' ORDER BY post_date DESC LIMIT 1;", $authorid));
if($prev) {
$title = preg_replace('/%title/',$prev->post_title, $title);
echo preg_replace('/%link/', '<a href="'.get_permalink($prev->ID).'" rel="prev">'.$title.'</a>', $link);
}
}
function get_next_post_by_author($link="%link »", $title="%title") {
global $wpdb, $post;
$authorid = $post->post_author;
$next = $wpdb->get_row($wpdb->prepare("SELECT ID, post_title FROM $wpdb->posts WHERE post_type='post' AND post_status='publish' AND post_author= %d AND post_date > '".$post->post_date."' ORDER BY post_date ASC LIMIT 1;", $authorid));
if($next) {
$title = preg_replace('/%title/',$next->post_title, $title);
echo preg_replace('/%link/', '<a href="'.get_permalink($next->ID).'" rel="next">'.$title.'</a>', $link);
}
}
Спасибо хабрапользователю Шмидт