10 полезных функций для WordPress без плагинов

5 (100%) 4 vote[s]

Предлагаем подборку из 10 вариантов решений без использования плагинов для сайта на WordPress: как вывести случайно сгенерированный список постов, счётчик для постов и вывод записей по рейтингу просмотров, блокировка копирования контента, как вставить ссылку на сайт при копировании, а также кнопка прокрутки вверх страницы.

1. Вывод случайных постов на сайте WordPress

Такой способ вывода записей полезен тем, что автоматически добавляется перелинковка страниц, а также выводятся записи, которые отодвинуты по дате создания в глубины архива и таким образом посетителям предоставляется  к ним доступ.

Перед использованием (и во избежания ошибок), ознакомьтесь со спецификацией и важными рекомендациями, как влияет изменение основного запроса на пагинацию страниц в WordPress. Также полное описание с примерами можно найти здесь.

Вот простой пример, в котором мы не трогаем глобальную переменную $post. В нем мы выводим 10 случайных постов с миниатюрами записей. Сразу прописываем классы для удобства дальнейшей стилизации и регистрируем шорткод, если надумаем вставлять где-нибудь в html.

Вставляем в function.php:

/*
 * СЛУЧАЙНЫЕ ЗАПИСИ количество - 10
 */
function simple_rand_posts() {
$args = array(
	'post_type' => 'post',
	'orderby'	=> 'rand',
	'posts_per_page' => 10,
	);
$the_query = new WP_Query( $args );

if ( $the_query->have_posts() ) {
$string .= '<div class="random_viev">';
$string .= '<p>Случайный выбор</p>';
$string .= '<ul>';
	while ( $the_query->have_posts() ) {
		$the_query->the_post();
		$string .= '<li class="random_li">';
		$string .= '<a href="'. get_permalink() .'"> '. get_the_post_thumbnail( $post->ID, 'post-thumbnail'); '</a>';
		$string .= '<p><a href="'. get_permalink() .'" >'. get_the_title() .'</a></p>';
		$string .= '</li>';
	}
	$string .= '</ul>';
$string .= '</div>';	
	/* Восстанавливаем оригинальные Post Data. Если в цикле используется the_post(), то обязательно после цикла нужно вызвать функцию wp_reset_postdata().*/
	wp_reset_postdata();
} else {
$string .= 'записей не найдено';
}
return $string;
}
add_shortcode('simple_rand_posts','simple_rand_posts');
add_filter('widget-text', 'do_shortcode');

Вывод будет в таком виде:

<div class="random_viev">
  <p>Случайный выбор</p>
	<ul>
	<li class="random_li">
		<a href=""><img src=""></a>
		<p><a href="">Post Title</a></p>
	</li>
	<li class="random_li">
		<a href=""><img src="" ></a>
		<p><a href="">Post Title 2</a></p>
	</li>
	<!-- И так 10 элементов списка -->
	</ul>
</div>

Теперь можно использовать и простую вставку в шаблоне, и шорткод, например, в виджетах (для этого находим в виджетах «Код HTML», вставляем в него шорткод, даём название, готово):

[simple_rand_posts]

А если нужно вывести где-нибудь в шаблоне WP, то в месте, где нужно вывести список, вставляем шорткод при помощи функции do_shortcode():

<?php echo do_shortcode( '[simple_rand_posts]' ); ?> 

2. Scroll Up (прокрутка страницы вверх) на JavaScript на сайте WordPress

Спецификация используемого метода Element.getBoundingClientRect() см. здесь.

Исходный код (вставляем в footer.php перед закрывающим тегом </body>):

<div class="nav123" style= 'position:fixed;'>
<a href ="#" id="go_up" onclick="scrollMenu('#aboutus')"> <img src="112.png" alt="наверх"></a>
</div>
<script>
function anim(duration) {
    var temp;
    return function(sel) {
        cancelAnimationFrame(temp);
        var start = performance.now();
        var from = window.pageYOffset || document.documentElement.scrollTop,
        to = document.querySelector(sel).getBoundingClientRect().top;
        requestAnimationFrame(function step(timestamp) {
            var progress = (timestamp - start) / duration;
            1 <= progress && (progress = 1);
            window.scrollTo(0, from + to * progress | 0);
            1 > progress && (temp = requestAnimationFrame(step))
        })
    }
};
var scrollMenu = anim(700)
 </script>

Отдельно прописываем стиль для картинки в header.php перед закрывающим тегом </head>:

#go_up {
position: fixed;
width: 40px;
height: 40px;
bottom: 50px;
right: 30px;
cursor: pointer;
}

3. Счётчик просмотров страниц/записей

По материалам wp-kama.ru.

В function.php где-то в середине вставляем:

add_action('wp_head', 'babulya_postviews');
function babulya_postviews() {

/* ------------ Настройки -------------- */
$meta_key       = 'views';  // Ключ мета поля, куда будет записываться количество просмотров.
$who_count      = 0;            // Чьи посещения считать? 0 - Всех. 1 - Только гостей. 2 - Только зарегистрированных пользователей.
$exclude_bots   = 1;            // Исключить ботов, роботов, пауков и прочую нечесть :)? 0 - нет, пусть тоже считаются. 1 - да, исключить из подсчета.

global $user_ID, $post;
	if(is_singular()) {
		$id = (int)$post->ID;
		static $post_views = false;
		if($post_views) return true; // чтобы 1 раз за поток
		$post_views = (int)get_post_meta($id,$meta_key, true);
		$should_count = false;
		switch( (int)$who_count ) {
			case 0: $should_count = true;
				break;
			case 1:
				if( (int)$user_ID == 0 )
					$should_count = true;
				break;
			case 2:
				if( (int)$user_ID > 0 )
					$should_count = true;
				break;
		}
		if( (int)$exclude_bots==1 && $should_count ){
			$useragent = $_SERVER['HTTP_USER_AGENT'];
			$notbot = "Mozilla|Opera"; //Chrome|Safari|Firefox|Netscape - все равны Mozilla
			$bot = "Bot/|robot|Slurp/|yahoo"; //Яндекс иногда как Mozilla представляется
			if ( !preg_match("/$notbot/i", $useragent) || preg_match("!$bot!i", $useragent) )
				$should_count = false;
		}

		if($should_count)
			if( !update_post_meta($id, $meta_key, ($post_views+1)) ) add_post_meta($id, $meta_key, 1, true);
	}
	return true;
}

В нужном месте шаблона single.php/page.php выводим список;

<div class="vv" style="text-align:center;font-style:italic;">			
			Просмотры: <?php echo get_post_meta ($post->ID,'views',true); ?></div>

4. Вывод постов по рейтингу просмотров

По материалам wp-kama.ru.

В function.php после функции подсчёта просмотров вставляем:

function babulya_get_most_viewed( $args = '' ){
	global $wpdb, $post;

	parse_str( $args, $i );

	$num    = isset( $i['num'] )    ? (int) $i['num'] : 10;
	$key    = isset( $i['key'] )    ? sanitize_text_field($i['key']) : 'views';
	$order  = isset( $i['order'] )  ? 'ASC' : 'DESC';
	$days   = isset( $i['days'] )   ? (int) $i['days'] : 0;
	$format = isset( $i['format'] ) ? stripslashes( $i['format'] ) : '';
	$cache  = isset( $i['cache'] );
	$echo   = isset( $i['echo'] )   ? (int) $i['echo'] : 1;

	if( $cache ){
		$cache_key = (string) md5( __FUNCTION__ . serialize( $args ) );

		//получаем и отдаем кеш если он есть
		if( $cache_out = wp_cache_get( $cache_key ) ){ 
			if( $echo )
				return print( $cache_out );
			else
				return $cache_out;
		}
	}

	if( $days ){
		$AND_days = "AND post_date > CURDATE() - INTERVAL $days DAY";
		if( strlen( $days ) == 4 ){
			$AND_days = "AND YEAR(post_date)=" . $days;
		}
	}

	$sql = "SELECT p.ID, p.post_title, p.post_date, p.guid, p.comment_count, (pm.meta_value+0) AS views
	FROM $wpdb->posts p
		LEFT JOIN $wpdb->postmeta pm ON (pm.post_id = p.ID)
	WHERE pm.meta_key = '$key' $AND_days
		AND p.post_type = 'post'
		AND p.post_status = 'publish'
	ORDER BY views $order LIMIT $num";
	$results = $wpdb->get_results( $sql );
	if( ! $results ){
		return false;
	}

	$out = $x = '';
	preg_match( '!{date:(.*?)}!', $format, $date_m );

	foreach( $results as $pst ){

		$x = ( $x == 'li1' ) ? 'li2' : 'li1';

		if( $pst->ID == $post->ID )
			$x .= ' current-item';

		$Title    = $pst->post_title;
		$a1       = '<a href="' . get_permalink( $pst->ID ) . "\" title=\"{$pst->views} просмотров: $Title\">";
		$a2       = '</a>';
		$comments = $pst->comment_count;
		$views    = $pst->views;

		if( $format ){

			$date    = apply_filters( 'the_time', mysql2date( $date_m[ 1 ], $pst->post_date ) );
			$Sformat = str_replace( $date_m[ 0 ], $date, $format );
			$Sformat = str_replace( [ '{a}', '{title}', '{/a}', '{comments}', '{views}' ], [ $a1, $Title, $a2, $comments, $views, ], $Sformat );
		}
		else
			$Sformat = $a1 . $Title . $a2;

		$out .= "<li class=\"$x\">$Sformat</li>";
	}

	if( $cache )
		wp_cache_add( $cache_key, $out );

	if( $echo )
		echo $out;
	else
		return $out;
}

Выводим список в нужном месте (single.php/page.php):

<?php babulya_get_most_viewed("num=20 &format={a}{title}{/a} - {views}"); ?>

Стили прописываем в style.css или прямо в блоке в шаблоне страниц/записей:

<div class="babulya_viev" style="margin:10%;padding:5% 10% 5% 10%;border-radius:6px;box-shadow:0 0 10px rgba(0,0,0,0.5);background: linear-gradient(to top, #fefcea, #ff8d29);"><p style="font-sise:24px;text-align:center;color:white;">
	Популярные записи
	</p>
	<ul class="babulya_viev_li" style="list-style:none;color:#004b70;padding:10px;font-size:16px;">
	 <?php babulya_get_most_viewed("num=20 &format={a}{title}{/a} - {views}"); ?>
    </ul>
</div>	

5. Отключаем обновления темы WordPress, плагинов, вывод сообщений

Если вы постепенно видоизменили тему шаблона до неузнаваемости, на всякий случай лучше отключить автоматическое обновление темы и соответствующие оповещения в админке (в function.php):

// ОТКЛЮЧАЕМ ОБНОВЛЕНИЕ ТЕМ
remove_action( 'load-update-core.php', 'wp_update_themes' );
add_filter( 'pre_site_transient_update_themes', '__return_null' );
 
// ОТКЛЮЧАЕМ АВТО ОБНОВЛЕНИЯ
add_filter( 'auto_update_theme', '__return_false' ); 
 
// СПРЯЧЕМ ИМЕЮЩИЕСЯ УВЕДОМЛЕНИЯ
add_action('admin_menu','hide_admin_notices');
function hide_admin_notices() {
    remove_action( 'admin_notices', 'update_nag', 3 );
}

Самый простой способ отключить обновления плагинов: находим в папке с плагином одноименный файл .php (обычно по пути wp-content/plugins/папка плагина/ и меняем версию (Version: X.X.X) на более высокую. Например:

<?php
/*
Plugin Name: 
Plugin URI: 
Description:
Version: 2.5.1 меняем здесь, например, на 9.9.9
Author: 
Author URI: 
Text Domain: 
Released under the GNU General Public License (GPL)
http://www.gnu.org/licenses/gpl.txt
*/

6. Добавляем ссылку на сайт при копировании материала

В шаблон записи/страницы (single.php/page.php) вставляем:

<script type="text/javascript">
//<![CDATA[
function addLink() {
    var body_element = document.getElementsByTagName('body')[0];
    var selection = window.getSelection();
    var pagelink = "<p>Источник: <a href='"+document.location.href+"'>"+document.location.href+"</a></p>";
    var copytext = selection + pagelink;
    var newdiv = document.createElement('div');
    newdiv.style.position = 'absolute';
    newdiv.style.left = '-99999px';
    body_element.appendChild(newdiv);
    newdiv.innerHTML = copytext;
    selection.selectAllChildren(newdiv);
    window.setTimeout( function() {
        body_element.removeChild(newdiv);
    }, 0);
}
document.oncopy = addLink;
//]]>
</script>

7. Запрещение выделения с сохранением функции ПКМ (правой кнопки мыши)

В файл header.php, перед тегом </head>

<script>
  document.onselectstart=new Function("return false");
document.ondragstart=new Function("return false");
</script>

8. Отключение ПКМ

<script>
  var message="";
function clickIE() {if (document.all) {(message);return false;}}
function clickNS(e) {if
(document.layers||(document.getElementById&&!document.all)) {
if (e.which==2) {
(message);
return false;}}}
if (document.layers) {
document.captureEvents(Event.MOUSEDOWN);
document.onmousedown=clickNS;
}else{
document.onmouseup=clickNS;
document.oncontextmenu=clickIE;
}
document.oncontextmenu=new Function("return false")
</script>

9. Отключение сочетаний клавиш клавиатуры (Ctrl+C, Ctrl+U, Ctrl+A, Ctrl+V)

<script>
document.onkeydown = function(e) {
        if (e.ctrlKey && 
            (e.keyCode === 67 || 
             e.keyCode === 86 || 
             e.keyCode === 85 || 
             e.keyCode === 117)) {
            alert('not allowed');
            return false;
        } else {
            return true;
        }
};
</script>

10. Переадресация на другую страницу при нажатии Ctrl+U

<script>
  document.onkeydown = function(event) {
    if (event.ctrlKey && (event.keyCode == 85) || (event.ctrlKey && event.shiftKey && (event.keyCode == 73)) || event.keyCode == 123) {document.location.href = 'адрес страницы';
        return false;		
    }	
}
</script>

Пример, как работает этот код, можно посмотреть на этой странице.

Читайте больше по теме:

Подписаться
Уведомление о
guest
0 комментариев
Inline Feedbacks
View all comments
Просмотры: 468

Популярные записи