Нам нравится WordPress, но не все из нас готовы принять все его настройки по умолчанию — в частности, то, как отображаются Записи.
Поскольку нас учили, что уникальность важна для позиционирования сайта и она производит хорошее впечатление на посетителя, на протяжении лет блоггеры и разработчики искали пути изменения отображения Записи, чтобы сделать ее максимально уникальной.
Сегодня мы сконцентрируемся на трюках, которые вы можете использовать для улучшения отображения вашего WordPress поста. Хотите ли вы изменить вид поста для того, чтобы улучшить впечатление пользователя, или для увеличения дохода от просмотра страниц, вероятно, есть способ сделать это без плагина.
Большинство фрагментов кода, представленных здесь, легко внедрить, в большинстве случаев вам нужно просто скопировать и вставить предоставленный код. Надеюсь, эти способы будут полезны для ваших проектов, наслаждайтесь!
Измените длину отрывка, просто добавив представленные ниже строки кода в ваш файл functions.php. 75 в данном случае — значение длины отрывка.
add_filter( 'excerpt_length' , 'my_excerpt_length' ); function my_excerpt_length( $len ) { return 75; } |
Большинство не знает, что у WordPress есть встроенная функция для отображения даты в формате времени, прошедшего с момента написания поста (то есть, например «2 дня назад»), как в Twitter. Фрагмент кода, представленный ниже, можно вставить где угодно в Цикле (loop) чтобы отображать дату в этом формате.
Posted <?php echo human_time_diff(get_the_time( 'U' ), current_time( 'timestamp' )) . ' ago' ; |
Представленная в WordPress 2.9 функция the_post_thumbnail() очень удобна для добавления и отображения миниатюры к посту. Плохая новость в том, что нет встроенного метода для отображения миниатюры поста в вашей RSS-ленте. Представленная ниже функция решает эту проблему. Просто вставьте ее в ваш файл functions.php и сохраните его, и миниатюра поста автоматически будет отображаться в вашей RSS-ленте.
// show post thumbnails in feeds function 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' ); |
Вы можете добавить этот фрагмент в файл 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 ); |
Вы можете отображать возрастающий номер каждого поста, и сделать это достаточно просто. Сначала вставьте следующую функцию в ваш файл 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); ?> |
Хотите исключить некоторые посты из вашей ленты? Вот решение для вас. Пожалуйста, обратите внимание, что вы должны фильтровать только то, что вы хотите фильтровать; в нашем примере это наша лента $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 ); |
Вставьте этот фрагмент кода в файл 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 ) ); } } } |
Вставка этого фрагмента кода в файл 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' ); |
Чтобы заменить слова партнерскими ссылками автоматически, просто вставьте код ниже в ваш файл 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' ); |
Добавление приведенного ниже фрагмента кода в файл 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' ); |
Код ниже позволяет вашему 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>' ; } } ?> |
Установка виджета сайдбара для отображения похожих постов очень проста. Просто скопируйте и вставьте код ниже в ваш файл 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> |
Ниже представлен полезный код, который вы можете вставить в вашу WordPress тему для того, чтобы включить возможность «срока годности» поста по дате и времени. Отредактируйте свою тему и замените ваш текущий WordPress цикл на этот «хакнутый» цикл:
<?php if (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) в качестве значения. Пост теперь не будет показываться после определенного момента времени.
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> |
Можно показать 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 } } |
По умолчанию, редактор 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' ); |
Представленный ниже фрагмент кода меняет редактор по умолчанию в консоли WordPress. Вы можете использовать Visual Editor или HTML Editor, просто добавьте один из них в файл functions.php.
# This sets the Visual Editor as default add_filter( 'wp_default_editor' , create_function( '' , 'return "tinymce";' ) ); # This sets the HTML Editor as default add_filter( 'wp_default_editor' , create_function( '' , 'return "html";' ) ); |
С представленным ниже кодом, вставленным в ваш файл 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' ); |
По определенной причине загрузчик WordPress не позволит вам загружать некоторые типы файлов, например .tmCommand. Если вам нужно загружать эти типы файлов на ваш сайт WordPress, вот функциональный фрагмент кода, который позволит вам это сделать. Вам нужно просто вставить его в ваш файл functions.php. Вы можете также добавить больше типов файлов, добавив их в строку 4, разделив при этом символом |.
<?php function addUploadMimes( $mimes ) { $mimes = array_merge ( $mimes , array ( 'tmbundle|tmCommand|tmDragCommand|tmSnippet|tmLanguage|tmPreferences' => 'application/octet-stream' )); return $mimes ; } ?> add_filter( 'upload_mimes' , 'addUploadMimes' ); |
Вставив этот фрагмент кода в файл 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' ); |
Представленный ниже синтаксис дает некоторые из возможных форматов постов, которые затем могут быть выбраны и использованы прямо в статье; и все, что вам нужно, это вставить код в файл functions.php вашей темы.
1 | add_theme_support( 'post-formats' , array ( 'aside' , 'audio' , 'image' , 'video' ) ); |
WordPress версии 2.9 представил возможность добавления миниатюры поста. Это круто, и чтобы отображать миниатюру поста также при редактировании поста и обзоре страницы, вы можете вставить представленный код в Плагин или добавить его в файл functions.php темы.
if ( !function_exists( 'fb_AddThumbColumn' ) && function_exists( 'add_theme_support' ) ) { // for post and page add_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 posts add_filter( 'manage_posts_columns' , 'fb_AddThumbColumn' ); add_action( 'manage_posts_custom_column' , 'fb_AddThumbValue' , 10, 2 ); // for pages add_filter( 'manage_pages_columns' , 'fb_AddThumbColumn' ); add_action( 'manage_pages_custom_column' , 'fb_AddThumbValue' , 10, 2 ); } |
Изначально это было написано разработчиком как способ для клиента отображать свои сообщения для каждого созданного автором поста. В данном случае у вас могли бы быть сообщения по типу «Отклонен«, «Ошибка«, «Источник» и т.д. Вы можете менять сообщения сразу под комментарием «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>';} |
Добавление этого 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 words wp_die( __( 'Error: your post title is over the maximum word count.' ) ); } add_action( 'publish_post' , 'maxWord' ); |
Вам ужасно не нравится шрифт, который используется в редакторе 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" ); |
Фрагмент кода для автоматического добавления своего поля в запись или страницу при публикации. Вы можете просто добавить код ниже в ваш файл 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); } } |
Вот очень удобный SQL запрос, который удалит все версии записей, а также связанные с ними метаданные. Вам нужно запустить этот запрос в вашей базе данных WordPress, и все версии (а также связанные с ними метаданные) будут удалены из вашей базы данных. Одно важное замечание здесь: убедитесь, что у вас есть резервная копия вашей базы данных перед тем, как запускать код.
DELETE a,b,c FROM wp_posts a WHERE a.post_type = 'revision' LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id) LEFT JOIN wp_postmeta c ON (a.ID = c.post_id); |
Хотели изменить длину отрывка в зависимости от того, в какой вы Рубрике? Вот код, который исполнит ваше желание. Просто вставьте код в ваш functions.php файл и не забудьте заменить ID Рубрики в третьей строке!
add_filter( 'excerpt_length' , 'my_excerpt_length' ); function my_excerpt_length( $length ) { if (in_category(14)) { return 13; } else { return 60; } } |
Если по какой-то уважительной причине вы хотите отключить функцию, которая делает авто-сохранение вашего поста, когда вы редактируете его в консоли, это возможно. Просто откройте ваш файл functions.php и вставьте в него следующий код:
function disableAutoSave(){ wp_deregister_script( 'autosave' ); } add_action( 'wp_print_scripts' , 'disableAutoSave' ); |
Вы можете затем сохранить файл, и WordPress больше никогда не будет автоматически сохранять пост. Вы можете также отменить это, удалив код.