Содержание
Предлагаем подборку из 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>
Пример, как работает этот код, можно посмотреть на этой странице.
Читайте больше по теме: