WordPress-трюков для работы с Записями и Страницами - Web-Global: Связывая миры через веб-технологии

WordPress-трюков для работы с Записями и Страницами

Пост опубликован 1 июня 2021 в 23:01 и находится в рубриках Wordpress. 938
Поделиться:

Нам нравится WordPress, но не все из нас готовы принять все его настройки по умолчанию — в частности, то, как отображаются Записи.

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

29 WordPress-трюков для работы с Записями и Страницами

Сегодня мы сконцентрируемся на трюках, которые вы можете использовать для улучшения отображения вашего WordPress поста. Хотите ли вы изменить вид поста для того, чтобы улучшить впечатление пользователя, или для увеличения дохода от просмотра страниц, вероятно, есть способ сделать это без плагина.

Большинство фрагментов кода, представленных здесь, легко внедрить, в большинстве случаев вам нужно просто скопировать и вставить предоставленный код. Надеюсь, эти способы будут полезны для ваших проектов, наслаждайтесь!

1. Изменение длины анонса записи

Измените длину отрывка, просто добавив представленные ниже строки кода в ваш файл functions.php. 75 в данном случае — значение длины отрывка.

add_filter('excerpt_length', 'my_excerpt_length');function my_excerpt_length($len) { return 75; }

2. Дата написания записи в стиле Twitter (2 дня назад)

Большинство не знает, что у WordPress есть встроенная функция для отображения даты в формате времени, прошедшего с момента написания поста (то есть, например «2 дня назад»), как в Twitter. Фрагмент кода, представленный ниже, можно вставить где угодно в Цикле (loop) чтобы отображать дату в этом формате.

Posted <?php echo human_time_diff(get_the_time('U'), current_time('timestamp')) . ' ago';

3. Отображение миниатюры записи в RSS ленте

Представленная в WordPress 2.9 функция the_post_thumbnail() очень удобна для добавления и отображения миниатюры к посту. Плохая новость в том, что нет встроенного метода для отображения миниатюры поста в вашей RSS-ленте. Представленная ниже функция решает эту проблему. Просто вставьте ее в ваш файл functions.php и сохраните его, и миниатюра поста автоматически будет отображаться в вашей RSS-ленте.

// show post thumbnails in feedsfunction diw_post_thumbnail_feeds($content) {   global $post;   if(has_post_thumbnail($post->ID)) {      $content = '<div>' . get_the_post_thumbnail($post->ID) . '</div>' . $content;    }   return $content;}add_filter('the_excerpt_rss', 'diw_post_thumbnail_feeds');add_filter('the_content_feed', 'diw_post_thumbnail_feeds');

4. Ограничение поиска только по заголовкам записей

Вы можете добавить этот фрагмент в файл functions.php вашей WordPress темы, чтобы ограничить поиск только по заголовкам записей.

function __search_by_title_only( $search, &$wp_query ){if ( empty($search) )return $search; // skip processing - no search term in query$q =& $wp_query->query_vars; // wp-includes/query.php line 2128 (version 3.1)$n = !empty($q['exact']) ? '' : '%';$searchand = '';foreach( (array) $q['search_terms'] as $term ) {$term = esc_sql( like_escape( $term ) );$search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";$searchand = ' AND ';}$term = esc_sql( like_escape( $q['s'] ) );if ( empty($q['sentence']) && count($q['search_terms']) > 1 && $q['search_terms'][0] != $q['s'] )$search .= " OR ($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";if ( !empty($search) ) {$search = " AND ({$search}) ";if ( !is_user_logged_in() )$search .= " AND ($wpdb->posts.post_password = '') ";}return $search;}add_filter( 'posts_search', '__search_by_title_only', 10, 2 );

5. Отображение номера для каждой записи

Вы можете отображать возрастающий номер каждого поста, и сделать это достаточно просто. Сначала вставьте следующую функцию в ваш файл functions.php:

function updateNumbers() {global $wpdb;$querystr = "SELECT $wpdb->posts.* FROM $wpdb->posts WHERE $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'post' ";$pageposts = $wpdb->get_results($querystr, OBJECT);$counts = 0 ;if ($pageposts):foreach ($pageposts as $post):setup_postdata($post);$counts++;add_post_meta($post->ID, 'incr_number', $counts, true);update_post_meta($post->ID, 'incr_number', $counts);endforeach;endif;} add_action ( 'publish_post', 'updateNumbers' );add_action ( 'deleted_post', 'updateNumbers' );add_action ( 'edit_post', 'updateNumbers' );

Как только вы закончите, вы можете показать номер поста с помощью следующего кода. Обратите внимание, что его нужно использовать внутри цикла.

<?php echo get_post_meta($post->ID,'incr_number',true); ?>

6. Исключение записи из ленты новостей WordPress

Хотите исключить некоторые посты из вашей ленты? Вот решение для вас. Пожалуйста, обратите внимание, что вы должны фильтровать только то, что вы хотите фильтровать; в нашем примере это наша лента $wp_query->is_feed. Если вы не сделаете это таким образом, то фильтр будет также работать в серверной части, и эти посты не будут отображаться в обзоре постов.

У функции два параметра. Вы передаете в первый параметр $where строку SQL, которая займется фильтром по ID. Дальше, в скобках, вам нужно задать ID записей, которые вы хотите отфильтровать.

function fb_post_exclude($where, $wp_query = NULL) {global $wpdb;if ( !$wp_query )global $wp_query;if ($wp_query->is_feed) {// exclude post with id 40 and 9$where .= " AND $wpdb->posts.ID NOT IN (40, 9)";}return $where;}add_filter( 'posts_where','fb_post_exclude', 1, 2 );

7. Редирект записи, когда поисковый запрос выдает один результат

Вставьте этот фрагмент кода в файл functions.php вашей WordPress темы для того, чтобы перенаправлять пользователя на пост автоматически, если WordPress поиск отдает только его в качестве результата.

add_action('template_redirect', 'single_result');function single_result() {if (is_search()) {global $wp_query;if ($wp_query->post_count == 1) {wp_redirect( get_permalink( $wp_query->posts['0']->ID ) );}}}

8. Автоматическое создание мета-описания Meta Description из The_content

Вставка этого фрагмента кода в файл functions.php вашей WordPress темы автоматически создаст meta description из вашего поста, отсекая шорткоды и теги. Также убедитесь, что у вас есть этот код в файле header.php, иначе этот фрагмент не будет работать.

function create_meta_desc() {global $post;if (!is_single()) { return; }$meta = strip_tags($post->post_content);$meta = strip_shortcodes($post->post_content);$meta = str_replace(array("n", "r", "t"), ' ', $meta);$meta = substr($meta, 0, 125);echo "<meta name='description' content='$meta' />";}add_action('wp_head', 'create_meta_desc');

9. Автоматическая замена слов партнерскими ссылками

Чтобы заменить слова партнерскими ссылками автоматически, просто вставьте код ниже в ваш файл functions.php. Не забудьте вставить ваши слова / ссылки, как показано в примере ниже.

function replace_text_wps($text){$replace = array(// 'WORD TO REPLACE' => 'REPLACE WORD WITH THIS''thesis' => '<a href="http://mysite.com/myafflink">thesis</a>','studiopress' => '<a href="http://mysite.com/myafflink">studiopress</a>');$text = str_replace(array_keys($replace), $replace, $text);return $text;} add_filter('the_content', 'replace_text_wps');add_filter('the_excerpt', 'replace_text_wps');

10. Автоматическое добавление ссылки «Читать далее» в конце анонса записи

Добавление приведенного ниже фрагмента кода в файл functions.php вашей WordPress темы вставит постоянную ссылку «Читать далее» в конец the_excerpt, очень похоже на то, как ссылка в конце содержимого the_content:

function excerpt_readmore($more) {return '... <a href="'. get_permalink($post->ID) . '" class="readmore">' . 'Read More' . '</a>';}add_filter('excerpt_more', 'excerpt_readmore');

11. Отображение похожих записей без плагина

Код ниже позволяет вашему WordPress сайту показывать похожие посты, основываясь на тегах текущего поста. Вам нужно разместить его внутри single.php или просто где угодно, где вы хотите показать похожие посты.

<?php$tags = wp_get_post_tags($post->ID);if ($tags) {$tag_ids = array();foreach($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id;$args=array('tag__in' => $tag_ids,'post__not_in' => array($post->ID),'showposts'=>5, // Number of related posts that will be shown.'caller_get_posts'=>1);$my_query = new wp_query($args);if( $my_query->have_posts() ) {echo '<h3>Related Posts</h3><ul>';while ($my_query->have_posts()) {$my_query->the_post();?><li><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></li><?php}echo '</ul>';}}?>

12. Создание своих собственных «популярных записей» в сайдбаре

Установка виджета сайдбара для отображения похожих постов очень проста. Просто скопируйте и вставьте код ниже в ваш файл sidebar.php. Если вам нужно изменить количество отображаемых постов, вы можете изменить 5 в конце третьей строки на любое число, которое вам нравится.

<h2>Popular Posts</h2><ul><?php $result = $wpdb->get_results("SELECT comment_count,ID,post_title FROM $wpdb->posts ORDER BY comment_count DESC LIMIT 0 , 5");foreach ($result as $post) {setup_postdata($post);$postid = $post->ID;$title = $post->post_title;$commentcount = $post->comment_count;if ($commentcount != 0) { ?><li><a href="<?php echo get_permalink($postid); ?>" title="<?php echo $title ?>"><?php echo $title ?></a> {<?php echo $commentcount ?>}</li><?php } } ?></ul>

13. Установка даты / времени срока актуальности записи

Ниже представлен полезный код, который вы можете вставить в вашу WordPress тему для того, чтобы включить возможность «срока годности» поста по дате и времени. Отредактируйте свою тему и замените ваш текущий WordPress цикл на этот «хакнутый» цикл:

<?phpif (have_posts()) :while (have_posts()) : the_post(); ?>$expirationtime = get_post_custom_values('expiration');if (is_array($expirationtime)) {$expirestring = implode($expirationtime);}$secondsbetween = strtotime($expirestring)-time();if ( $secondsbetween > 0 ) {// For exemple...   the_title();the_excerpt();}endwhile;endif;?>

Чтобы создать пост с датой/временем потери актуальности, вы можете просто создать свое поле. Передайте expiration в качестве ключа и вашу дату/время (формат: мм/дд/гг 00:00:00) в качестве значения. Пост теперь не будет показываться после определенного момента времени.

14. Список будущих записей

WordPress позволяет перечислять будущие посты, и чтобы получить эту возможность, просто вставьте код туда, где вы хотите отображать список будущих записей:

<div id="zukunft"><div id="zukunft_header"><p>Future events</p></div><?php query_posts('showposts=10&post_status=future'); ?><?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div><p><strong><?php the_title(); ?></strong><?php edit_post_link('e',' (',')'); ?><br /><span class="datetime"><?php the_time('j. F Y'); ?></span></p></div> <?php endwhile; else: ?><p>No future events scheduled.</p><?php endif; ?></div>

15. Отображение AdSense только для посетителей с поисковых систем

Можно показать AdSense только посетителям, пришедшим через поиск поисковых систем, и вот код для этого, просто вставьте его в файл functions.php вашей темы.

function scratch99_fromasearchengine(){$ref = $_SERVER['HTTP_REFERER'];$SE = array('/search?', 'images.google.', 'web.info.com', 'search.', 'del.icio.us/search', 'soso.com', '/search/', '.yahoo.');foreach ($SE as $source) {if (strpos($ref,$source)!==false) return true;}return false;}

В массиве $SE вы определяете поисковые системы. Вы можете добавить новую поисковую систему, добавив элемент в массив, затем вставить код где угодно в шаблоне, где вы хотите показать рекламу AdSense, и все! Реклама будет отображаться только посетителям, пришедшим на сайт через поисковые системы.

if (function_exists('scratch99_fromasearchengine')) {if (scratch99_fromasearchengine()) {INSERT YOUR CODE HERE}}

16. Дополнительные HTML теги в редакторе

По умолчанию, редактор WordPress не позволяет HTML теги, которые не совместимы со стандартом XHTML 1.0. Тем не менее, представленный ниже код заставит редактор поддерживать больше тегов. Вы можете вставить фрагмент кода в файл functions.php вашей темы, сохранить его, и функция будет работать.

function fb_change_mce_options($initArray) {// Comma separated string od extendes tags// Command separated string of extended elements$ext = 'pre[id|name|class|style],iframe[align|longdesc|name|width|height|frameborder |scrolling|marginheight|marginwidth|src]';if ( isset( $initArray['extended_valid_elements'] ) ) {$initArray['extended_valid_elements'] .= ',' . $ext;} else {$initArray['extended_valid_elements'] = $ext;} // maybe; set tiny paramter verify_html//$initArray['verify_html'] = false;return $initArray;}add_filter('tiny_mce_before_init', 'fb_change_mce_options');

17. Установка редактора по умолчанию

Представленный ниже фрагмент кода меняет редактор по умолчанию в консоли WordPress. Вы можете использовать Visual Editor или HTML Editor, просто добавьте один из них в файл functions.php.

# This sets the Visual Editor as defaultadd_filter( 'wp_default_editor', create_function('', 'return "tinymce";') ); # This sets the HTML Editor as defaultadd_filter( 'wp_default_editor', create_function('', 'return "html";') );

18. Установка разных стилей редактора для разных типов записей

С представленным ниже кодом, вставленным в ваш файл functions.php, вы можете установить разные таблицы стилей редактора для разных типов поста. Вам нужно будет адаптировать код в зависимости от ваших типов постов, и не забудьте также сменить названия таблиц стилей.

function my_editor_style() {global $current_screen;switch ($current_screen->post_type) {case 'post':add_editor_style('editor-style-post.css');break; case 'page':add_editor_style('editor-style-page.css');break; case 'portfolio':add_editor_style('editor-style-portfolio.css');break;}}add_action( 'admin_head', 'my_editor_style' );

19. Загрузка большего количества типов файлов

По определенной причине загрузчик WordPress не позволит вам загружать некоторые типы файлов, например .tmCommand. Если вам нужно загружать эти типы файлов на ваш сайт WordPress, вот функциональный фрагмент кода, который позволит вам это сделать. Вам нужно просто вставить его в ваш файл functions.php. Вы можете также добавить больше типов файлов, добавив их в строку 4, разделив при этом символом |.

<?phpfunction addUploadMimes($mimes) {$mimes = array_merge($mimes, array('tmbundle|tmCommand|tmDragCommand|tmSnippet|tmLanguage|tmPreferences' => 'application/octet-stream'));return $mimes;}?>add_filter('upload_mimes', 'addUploadMimes');

20. Включение редактора TinyMCE для правки анонса записи

Вставив этот фрагмент кода в файл functions.php вашей темы WordPress, вы активируете редактор TinyMC для поля ввода анонса записи.

function tinymce_excerpt_js(){ ?><script type="text/javascript">jQuery(document).ready( tinymce_excerpt );function tinymce_excerpt() {jQuery("#excerpt").addClass("mceEditor");tinyMCE.execCommand("mceAddControl", false, "excerpt");}</script><?php }add_action( 'admin_head-post.php', 'tinymce_excerpt_js');add_action( 'admin_head-post-new.php', 'tinymce_excerpt_js'); function tinymce_css(){ ?><style type='text/css'>#postexcerpt .inside{margin:0;padding:0;background:#fff;}#postexcerpt .inside p{padding:0px 0px 5px 10px;}#postexcerpt #excerpteditorcontainer { border-style: solid; padding: 0; }</style><?php }add_action( 'admin_head-post.php', 'tinymce_css');add_action( 'admin_head-post-new.php', 'tinymce_css');

21. Форматы записей — интересные вариации для темы

Представленный ниже синтаксис дает некоторые из возможных форматов постов, которые затем могут быть выбраны и использованы прямо в статье; и все, что вам нужно, это вставить код в файл functions.php вашей темы.

1add_theme_support( 'post-formats', array( 'aside', 'audio', 'image', 'video' ) );

22. Отображение миниатюры при редактировании записи и обзоре страницы

WordPress версии 2.9 представил возможность добавления миниатюры поста. Это круто, и чтобы отображать миниатюру поста также при редактировании поста и обзоре страницы, вы можете вставить представленный код в Плагин или добавить его в файл functions.php темы.

if ( !function_exists('fb_AddThumbColumn') && function_exists('add_theme_support') ) {// for post and pageadd_theme_support('post-thumbnails', array( 'post', 'page' ) );function fb_AddThumbColumn($cols) {$cols['thumbnail'] = __('Thumbnail');return $cols;} function fb_AddThumbValue($column_name, $post_id) {$width = (int) 35;$height = (int) 35;if ( 'thumbnail' == $column_name ) {// thumbnail of WP 2.9$thumbnail_id = get_post_meta( $post_id, '_thumbnail_id', true ); // image from gallery$attachments = get_children( array('post_parent' => $post_id, 'post_type' => 'attachment', 'post_mime_type' => 'image') ); if ($thumbnail_id)$thumb = wp_get_attachment_image( $thumbnail_id, array($width, $height), true );elseif ($attachments) {foreach ( $attachments as $attachment_id => $attachment ) {$thumb = wp_get_attachment_image( $attachment_id, array($width, $height), true );}}if ( isset($thumb) && $thumb ) { echo $thumb; }else { echo __('None'); }}} // for postsadd_filter( 'manage_posts_columns', 'fb_AddThumbColumn' );add_action( 'manage_posts_custom_column', 'fb_AddThumbValue', 10, 2 ); // for pagesadd_filter( 'manage_pages_columns', 'fb_AddThumbColumn' );add_action( 'manage_pages_custom_column', 'fb_AddThumbValue', 10, 2 );}

23. Создание своего сообщения о статусе записи в Консоли

Изначально это было написано разработчиком как способ для клиента отображать свои сообщения для каждого созданного автором поста. В данном случае у вас могли бы быть сообщения по типу «Отклонен«, «Ошибка«, «Источник» и т.д. Вы можете менять сообщения сразу под комментарием «Array of custom status messages» в коде, также убедитесь, что вы изменили названия классов, которые вы можете изменить после комментария «change color of messages below«.

add_filter('display_post_states', 'custom_post_state');function custom_post_state($states) {global $post;$show_custom_state = get_post_meta($post->ID, '_status');if ($show_custom_state) {$states[] = __('<span class="custom_state ' . strtolower($show_custom_state[0]) . '">' . $show_custom_state[0] . '</span>');}return $states;}add_action('post_submitbox_misc_actions', 'custom_status_metabox'); function custom_status_metabox() {global $post;$custom = get_post_custom($post->ID);$status = $custom["_status"][0];$i = 0;/* ----------------------------------- *//* 
 Array of custom status messages            *//* ----------------------------------- */$custom_status = array('Spelling', 'Review', 'Errors', 'Source', 'Rejected', 'Final', );echo '<div class="misc-pub-section custom">';echo '<label>Custom status: </label><select name="status">';echo '<option class="default">Custom status</option>';echo '<option>-----------------</option>';for ($i = 0; $i < count($custom_status); $i++) {if ($status == $custom_status[$i]) {echo '<option value="' . $custom_status[$i] . '" selected="true">' . $custom_status[$i] . '</option>';} else { echo '<option value="' . $custom_status[$i] . '">' . $custom_status[$i] . '</option>'; }} echo '</select>';echo '<br /></div>';}add_action('save_post', 'save_status'); function save_status() {global $post;if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {return $post->ID;}update_post_meta($post->ID, "_status", $_POST["status"]);}add_action('admin_head', 'status_css'); function status_css() {echo '<style type="text/css">.default{font-weight:bold;}.custom{border-top:solid 1px #e5e5e5;}.custom_state{font-size:9px;color:#666;background:#e5e5e5;padding:3px 6px 3px 6px;-moz-border-radius:3px;}/* ----------------------------------- *//*   change color of messages below            *//* ----------------------------------- */.spelling{background:#4BC8EB;color:#fff;}.review{background:#CB4BEB;color:#fff;}.errors{background:#FF0000;color:#fff;}.source{background:#D7E01F;color:#333;}.rejected{background:#000000;color:#fff;}.final{background:#DE9414;color:#333;}</style>';}

24. Установка максимальной длинны заголовка записи

Добавление этого PHP кода в functions.php файл вашей WordPress темы установит максимальное количество слов, которое может быть отображено в заголовке поста. Очень удобно!

function maxWord($title){global $post;$title = $post->post_title;if (str_word_count($title) >= 10 ) //set this to the maximum number of wordswp_die( __('Error: your post title is over the maximum word count.') );}add_action('publish_post', 'maxWord');

25. Как изменить стандартный шрифт WordPress редактора

Вам ужасно не нравится шрифт, который используется в редакторе WordPress? Его можно изменить на современный шрифт, например, Monaco или Consolas, просто вставьте код в файл functions.php вашей темы WordPress.

function change_editor_font(){echo "<style type='text/css'>#editorcontainer textarea#content {font-family: Monaco, Consolas, "Andale Mono", "Dejavu Sans Mono", monospace;font-size:14px;color:#333;}</style>";}add_action("admin_print_styles", "change_editor_font");

26. Добавление своего поля при публикации записи / страницы

Фрагмент кода для автоматического добавления своего поля в запись или страницу при публикации. Вы можете просто добавить код ниже в ваш файл functions.php, размещенный в папке вашей темы. Конечно, не забудьте изменить название вашего поля.

add_action('publish_page', 'add_custom_field_automatically');add_action('publish_post', 'add_custom_field_automatically'); function add_custom_field_automatically($post_ID) {global $wpdb;if(!wp_is_post_revision($post_ID)) {add_post_meta($post_ID, 'field-name', 'custom value', true);}}

27. Избавление от ненужных версий записей

Вот очень удобный SQL запрос, который удалит все версии записей, а также связанные с ними метаданные. Вам нужно запустить этот запрос в вашей базе данных WordPress, и все версии (а также связанные с ними метаданные) будут удалены из вашей базы данных. Одно важное замечание здесь: убедитесь, что у вас есть резервная копия вашей базы данных перед тем, как запускать код.

DELETE a,b,cFROM wp_posts aWHERE a.post_type = 'revision'LEFT JOIN wp_term_relationships bON (a.ID = b.object_id)LEFT JOIN wp_postmeta c ON (a.ID = c.post_id);

28. Изменение длины анонса в зависимости от Рубрики

Хотели изменить длину отрывка в зависимости от того, в какой вы Рубрике? Вот код, который исполнит ваше желание. Просто вставьте код в ваш functions.php файл и не забудьте заменить ID Рубрики в третьей строке!

add_filter('excerpt_length', 'my_excerpt_length');function my_excerpt_length($length) {if(in_category(14)) {return 13;} else {return 60;}}

29. Отключение автоматического сохранения записи

Если по какой-то уважительной причине вы хотите отключить функцию, которая делает авто-сохранение вашего поста, когда вы редактируете его в консоли, это возможно. Просто откройте ваш файл functions.php и вставьте в него следующий код:

function disableAutoSave(){wp_deregister_script('autosave');}add_action( 'wp_print_scripts', 'disableAutoSave' );

Вы можете затем сохранить файл, и WordPress больше никогда не будет автоматически сохранять пост. Вы можете также отменить это, удалив код.