Вернуться   Форум SAPE.RU > Общие вопросы > Разработка и сопровождение сайтов

-->
Ответ
 
Опции темы
Старый 11.09.2009, 23:29   #1
Мастер
 
Аватар для LSN
 
Регистрация: 27.03.2009
Адрес: ЮГ
Сообщений: 719
Вес репутации: 227
LSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущее
По умолчанию Подборка шорткодов для WP

Сделал небольшую подборочку шорткодов (short code) для WP. Думаю, что будет полезно.

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

Итак поехали!

Отключаем автосохранение постов в админке (кого как, а меня раздражает :-))

вставляем в functions.php следующий код:

PHP код:
function disableAutoSave(){
    
wp_deregister_script('autosave');
}
add_action'wp_print_scripts''disableAutoSave' ); 

Автоматичекое вставление картинок, используя имя файла

вставляем в functions.php следующий код:

PHP код:
function image_shortcode($atts$content null) {
    
extractshortcode_atts( array(
    
'name' => '',
    
'align' => 'right',
    
'ext' => 'png'
    
'path' => '/wp-content/uploads/',
    
'url' => ''
    
), $atts ) );
    
$file=ABSPATH."$path$name.$ext";
    if (
file_exists($file)) {
        
$size=getimagesize($file);
        if (
$size!==false$size=$size[3];
        
$output "<img src='".get_option('siteurl')."$path$name.$ext' alt='$name$size align='$align' class='align$align' />";
        if (
$url$output "<a href='$url' title='$name'>".$output.'</a>';
        return 
$output;
    }
    else {
        
trigger_error("'$path$name.$ext' image not found"E_USER_WARNING);
        return 
'';
    }
}
add_shortcode('image','image_shortcode'); 
Теперь мы можем использовать такой шорткод:
Код HTML:
[image name=название картинки]
Настройки:align-выравнивание, ext - расширение файлов, path - папка с картинками

Считаем количество слов в посте

вставляем в functions.php следующий код:

PHP код:
function wcount(){
    
ob_start();
    
the_content();
    
$content ob_get_clean();
    return 
sizeof(explode(" "$content));

Вызов функции
PHP код:
<?php echo wcount(); ?>
Отображаем тэги для определенной категори (если пофантазировать - очень удобная штука для навигации)
вставляем код куда нам надо:
PHP код:
<?php
    query_posts
('category_name=НАЗВАНИЕ КАТЕГОРИИ');
    if (
have_posts()) : while (have_posts()) : the_post();
        
$posttags get_the_tags();
        if (
$posttags) {
            foreach(
$posttags as $tag) {
                
$all_tags_arr[] = $tag -> name;
            }
        }
    endwhile; endif; 

    
$tags_arr array_unique($all_tags_arr);
    echo 
'<pre>'.print_r($tags_arrtrue).'</pre>';

?>
Отключаем автоматическое форматирование части текста

вставляем в functions.php следующий код:
PHP код:
function my_formatter($content) {
    
$new_content '';
    
$pattern_full '{(\[raw\].*?\[/raw\])}is';
    
$pattern_contents '{\[raw\](.*?)\[/raw\]}is';
    
$pieces preg_split($pattern_full$content, -1PREG_SPLIT_DELIM_CAPTURE);

    foreach (
$pieces as $piece) {
        if (
preg_match($pattern_contents$piece$matches)) {
            
$new_content .= $matches[1];
        } else {
            
$new_content .= wptexturize(wpautop($piece));
        }
    }

    return 
$new_content;
}

remove_filter('the_content''wpautop');
remove_filter('the_content''wptexturize');

add_filter('the_content''my_formatter'99); 
Теперь такой текст
Код HTML:
[raw]Unformatted code[/raw]
не будет автоматически форматироваться

Отображаем категории в две калонки

вставляем код куда нам надо:

PHP код:
<?php
$cats 
explode("<br />",wp_list_categories('title_li=&echo=0&depth=1&style=none'));
$cat_n count($cats) - 1;
for (
$i=0;$i<$cat_n;$i++):
if (
$i<$cat_n/2):
$cat_left $cat_left.'<li>'.$cats[$i].'</li>';
elseif (
$i>=$cat_n/2):
$cat_right $cat_right.'<li>'.$cats[$i].'</li>';
endif;
endfor;
?>
<ul class="left">
<?php echo $cat_left;?>
</ul>
<ul class="right">
<?php echo $cat_right;?>
</ul>
Часть текста, которая видна только зарегистрированным пользователям

вставляем в functions.php следующий код:

PHP код:
add_shortcode'member''member_check_shortcode' );

function 
member_check_shortcode$atts$content null ) {
     if ( 
is_user_logged_in() && !is_null$content ) && !is_feed() )
        return 
$content;
    return 
'';

Теперь такой текст (урл, картинка и т.д) увидят только зарегистрированные пользователи
Код HTML:
[member]
Какойто текст бла-бла
[/member]
Отображаем посты между определенными датами

вставляем код перед началом цикла:
PHP код:
<?php
  
function filter_where($where '') {
        
$where .= " AND post_date >= '2009-05-01' AND post_date <= '2009-05-15'";
    return 
$where;
  }
add_filter('posts_where''filter_where');
query_posts($query_string);
?>
Даты меняем по необходимости

Отображаем количество фалловеров у записи (Twitter)

вставляем в functions.php следующий код:
PHP код:
<?php
function tweets($url){
  
$content file_get_contents("http://api.tweetmeme.com/url_info?url=".$url);
  
$x = new SimpleXmlElement($content);
  
$tweets $x->story->url_count;
  echo 
"Tweets: ".$tweets;
}
Для вызова функции используется
PHP код:
<?php tweets($post->permalink); ?>
Вставляется в single.php

Отображаем количество зарегистрированных пользователей

вставляем код куда нам надо:
PHP код:
$users $wpdb->get_var("SELECT COUNT(ID) FROM $wpdb->users");
echo 
$users." registered users."
Отображаем пост в три колонки

Вставляется в single.php:
PHP код:
<?php
$page_columns 
explode("[--column--]"$post->post_content);
print 
$page_columns[0];
print 
'<div class="column first">';
print 
$page_columns[1];
print 
'</div>';
print
'<div class="column second">';
print 
$page_columns[2];
print 
'</div>';
print 
'<div class="column third">';
print 
$page_columns[3];
print 
'</div>';
?>
При этом пост должен быть оформлен так:
Код HTML:
идет какой-то текст.....
[--column--]
Текст для первой колонки
[--column--]
Текст для второй колонки
[--column--]
Текст для третьей колонки
Не забудте придать этому вид с помощью CSS

Получаем последние комментарии без плагина

Вставляем код куда надо:

PHP код:
<?php
  
global $wpdb;
  
$sql "SELECT DISTINCT ID, post_title, post_password, comment_ID, comment_post_ID, comment_author, comment_date_gmt, comment_approved, comment_type,comment_author_url, SUBSTRING(comment_content,1,30) AS com_excerpt FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID = $wpdb->posts.ID) WHERE comment_approved = '1' AND comment_type = '' AND post_password = '' ORDER BY comment_date_gmt DESC LIMIT 10";

  
$comments $wpdb->get_results($sql);
  
$output $pre_HTML;
  
$output .= "\n<ul>";
  foreach (
$comments as $comment) {
    
$output .= "\n<li>".strip_tags($comment->comment_author) .":" "<a href=\"" get_permalink($comment->ID)."#comment-" $comment->comment_ID "\" title=\"on ".$comment->post_title "\">" strip_tags($comment->com_excerpt)."</a></li>";
  }
  
$output .= "\n</ul>";
  
$output .= $post_HTML;
  echo 
$output;
?>
Число комментариев настраивается, по умолчанию 10

Не показываем картинки из поста, когда он на главной странице

вставляем в functions.php следующий код:

PHP код:
add_filter('the_content','wpi_image_content_filter',11);

function 
wpi_image_content_filter($content){

    if (
is_home() || is_front_page()){
      
$content preg_replace("/<img[^>]+\>/i"""$content);
    }

    return 
$content;

Показываем похожие записи без плагина

вставляем в functions.php следующий код:

PHP код:
function related_posts_shortcode$atts ) {
    
extract(shortcode_atts(array(
        
'limit' => '5',
    ), 
$atts));

    global 
$wpdb$post$table_prefix;

    if (
$post->ID) {
        
$retval '<ul>';
         
// Get tags
        
$tags wp_get_post_tags($post->ID);
        
$tagsarray = array();
        foreach (
$tags as $tag) {
            
$tagsarray[] = $tag->term_id;
        }
        
$tagslist implode(','$tagsarray);

        
// Do the query
        
$q "SELECT p.*, count(tr.object_id) as count
            FROM 
$wpdb->term_taxonomy AS tt, $wpdb->term_relationships AS tr, $wpdb->posts AS p WHERE tt.taxonomy ='post_tag' AND tt.term_taxonomy_id = tr.term_taxonomy_id AND tr.object_id  = p.ID AND tt.term_id IN ($tagslist) AND p.ID != $post->ID
                AND p.post_status = 'publish'
                AND p.post_date_gmt < NOW()
             GROUP BY tr.object_id
            ORDER BY count DESC, p.post_date_gmt DESC
            LIMIT 
$limit;";

        
$related $wpdb->get_results($q);
         if ( 
$related ) {
            foreach(
$related as $r) {
                
$retval .= '
    <li><a title="'
.wptexturize($r->post_title).'" href="'.get_permalink($r->ID).'">'.wptexturize($r->post_title).'</a></li>
'
;
            }
        } else {
            
$retval .= '
    <li>No related posts found</li>
'
;
        }
        
$retval .= '</ul>
'
;
        return 
$retval;
    }
    return;
}
add_shortcode('related_posts''related_posts_shortcode'); 
Фунция вызывается так:
Код HTML:
[related_posts]
Показываем количество результатов найденных в поиске

в файле search.php ищем:

Код HTML:
<h2 class="pagetitle">Search Results</h2>
Заменяем на:
PHP код:
<h2 class="pagetitle">Search Results for <?php /* Search Count */ $allsearch = &new WP_Query("s=$s&showposts=-1"); $key wp_specialchars($s1); $count $allsearch->post_count_e(''); _e('<span class="search-terms">'); echo $key_e('</span>'); _e(' — '); echo $count ' '_e('articles'); wp_reset_query(); ?></h2>
Убираем напоминание об обновлении

вставляем в functions.php следующий код:
PHP код:
if ( !current_user_can'edit_users' ) ) {
  
add_action'init'create_function'$a'"remove_action( 'init', 'wp_version_check' );" ), );
  
add_filter'pre_option_update_core'create_function'$a'"return null;" ) );

Показываем запланированные посты

Вставляем куда надо:
PHP код:
<div>
    <div><p>Скоро читайте</p></div>
    <?php query_posts('showposts=10&post_status=future'); ?>
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
        <div >
            <p class><b><?php the_title(); ?></b><?php edit_post_link('e',' (',')'); ?><br />
            <span class="datetime"><?php the_time('j. F Y'); ?></span></p>
        </div>
    <?php endwhile; else: ?><?php endif; ?>
</div>
Показываем посты рандомом

На заметку: кто не понимает как работает цикл (loop) будте осторожны

в index.php перед началом цикла вставляем:

PHP код:
query_posts('orderby=rand'); 
Запретить к индексации определенную категорию

в header.php вставляем между тэгами <head></head>
PHP код:
<?php if ( is_category('8') || in_category('8') ) {
    echo 
'<meta name="robots" content="noindex">';
}
8 - id категории

если надо запретить определенный пост, то:
PHP код:
<?php if ($post->ID == 17) {
    echo 
'<meta name="robots" content="noindex">';
}
17 - id поста

Показываем рандомный пост в сайдбаре

вставляем там где надо:
PHP код:
query_posts(array('orderby' => 'rand''showposts' => 1));
if (
have_posts()) :
     while (
have_posts()) : the_post();
         
the_title();
         
the_excerpt();
     endwhile;
endif; 
Показываем самый комментируемый пост за определенное время

вставляем там где надо:

PHP код:
<h2>Самая обсуждаемая новость</h2>
<ul>
<?php
$result 
$wpdb->get_results("SELECT comment_count,ID,post_title, post_date FROM $wpdb->posts WHERE post_date BETWEEN '2008-01-01' AND '2008-12-31' ORDER BY comment_count DESC LIMIT 0 , 10");

foreach (
$result as $topten) {
    
$postid $topten->ID;
    
$title $topten->post_title;
    
$commentcount $topten->comment_count;
    if (
$commentcount != 0) {
    
?>
         <li><a href="<?php echo get_permalink($postid); ?>"><?php echo $title ?></a></li>
    <?php }
}
?>
</ul>
Даты настраиваются

Подсвечиваем текущую категорию

в CSS добавляем:

Код HTML:
#nav .current-cat{
    background:#999;
    color:#222;
    text-decoration:underline;
}

Авторы шортокодов: WP recipes, Blog Oh Blog, Kyle Eslick, Avice De’vereux, Blue Anvil, ProBlogDesign, WordPress Codex, Joost de Valk
Подборку сделал (и местами перевел) LSN


ЗЫ: виджеты - зло!
__________________
Не знать - не стыдно. Стыдно - не учиться.
Отличный сервис синхронизации и обмена файлов между компьютерами. (Free)
при регистрации по ссылке 250MB места в подарок
LSN вне форума   Ответить с цитированием
Старый 11.09.2009, 23:51   #2
Специалист
 
Аватар для Pikasso_40
 
Регистрация: 18.03.2008
Сообщений: 304
Вес репутации: 207
Pikasso_40 - очень-очень хороший человекPikasso_40 - очень-очень хороший человекPikasso_40 - очень-очень хороший человекPikasso_40 - очень-очень хороший человекPikasso_40 - очень-очень хороший человек
По умолчанию

5 баллов ! Отличная статья, спасибо !
__________________
Чудеса случаются. Это вам любой программист скажет...
Pikasso_40 вне форума   Ответить с цитированием
Старый 12.09.2009, 00:27   #3
Специалист
 
Аватар для Shade-first
 
Регистрация: 08.05.2009
Адрес: БССР
Сообщений: 455
Вес репутации: 200
Shade-first - просто великолепная личностьShade-first - просто великолепная личностьShade-first - просто великолепная личностьShade-first - просто великолепная личностьShade-first - просто великолепная личностьShade-first - просто великолепная личностьShade-first - просто великолепная личность
По умолчанию

Классно )) Спасибо за подборку. Теперь можно избавиться от лишних плагинов и забацать прикольный контент
Shade-first вне форума   Ответить с цитированием
Старый 12.09.2009, 09:11   #4
Специалист
 
Регистрация: 18.12.2007
Сообщений: 137
Вес репутации: 202
poult на пути к лучшему
По умолчанию

Молодец! Супер подборочка
poult вне форума   Ответить с цитированием
Старый 12.09.2009, 09:51   #5
Глобальный Wordpress'овед
 
Аватар для Globalzru
 
Регистрация: 20.06.2008
Адрес: Чешская республика
Сообщений: 1,853
Вес репутации: 297
Globalzru - прекрасное будущееGlobalzru - прекрасное будущееGlobalzru - прекрасное будущееGlobalzru - прекрасное будущееGlobalzru - прекрасное будущееGlobalzru - прекрасное будущееGlobalzru - прекрасное будущееGlobalzru - прекрасное будущееGlobalzru - прекрасное будущееGlobalzru - прекрасное будущееGlobalzru - прекрасное будущее
Отправить сообщение для Globalzru с помощью ICQ
По умолчанию

Хорошая работа, молодец. Кто не знал всего этого, подборочка не заменима!
__________________
Заходите на мой личный блог [Обменяюсь ссылками с подобными сайтами, ТИЦ от 10]
Стабильный хостинг - Хочешь скидку 25% на любой НОВЫЙ заказ? Напиши!
Недорогие услуги по Wordpress
Globalzru вне форума   Ответить с цитированием
Старый 12.09.2009, 13:14   #6
Мастер
 
Аватар для LSN
 
Регистрация: 27.03.2009
Адрес: ЮГ
Сообщений: 719
Вес репутации: 227
LSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущее
По умолчанию

Рад что кому-то пригодилось, вечером еще одну подборку выложу, думаю тоже будет интересно

Добавлено через 1 час 44 минуты
WP Ajax Edit Comments
Разрешаем пользователям редактировать свои комментарии в течении определенного времени

WassUp
Собирает подробную статистику о пользователях пришедших к вам на сайт:
ip
referer
Поисковая система
запрос
OC / язык/ браузер
просмотренные страницы
рисует подробные графики

Email Users
Позволяет рассылать Email зареестрированным пользователям, есть разные настройкии

Twitter Poster
Этот плагин позволяет публиковать посты в блог и в Twitter одновременно

Login-box
Позволяет входить в админку прямо с любой страницы блога, нажав Ctrl+E

Smooth Slider
Делаем слайд-шоу

Old Post Promoter
Возрождаем старые посты. Находит случайным образом старый пост и сбрасывает его дату публикации на текущий день

AnyFont
Позволяет использовать любые .ttf шрифты на сайте

PHP Shortcode
Используем php там, где нам хочется: посты, страницы и т.д.

Raw HTML
Используем html, CSS, JavaScript там где это необходимо, но обычно нельзя

JournalPress
Кросспостинг в ЖЖ

Search Regex
Ищем, заменяем с помощью Regex из админки блога

No Future Posts
Публикует все запланированные посты сразу

New User Email Set Up
Автоматически отправляем Email новому зарегистрированному пользователю

StatPress Reloaded
Еще один вариант сбора статистики (ее там много), примечателен тем, что любую статистику можно показать на блоге. Например сколько вчера посмотрели страниц посетители на блоге.

Easy2hide
Забавный плагин. Прячет часть текста от пользователя, пока он не прокомментирует статью :-)

Best Post Page
На основе просмотров и комментариев выбирает 10 лучших постов и помещает их на отдельную страничку под названием Best

И на закуску ;-)

Mass Page Maker (тестировался на 2.8.4)
Массовый импорт постов и страниц в WP из .CSV файлов, на сайте есть инструкция

Все плагины вместе с инструкциями можно найти wordpress.org
__________________
Не знать - не стыдно. Стыдно - не учиться.
Отличный сервис синхронизации и обмена файлов между компьютерами. (Free)
при регистрации по ссылке 250MB места в подарок

Последний раз редактировалось LSN; 12.09.2009 в 13:14. Причина: Добавлено сообщение
LSN вне форума   Ответить с цитированием
Старый 12.09.2009, 15:14   #7
Новичок
 
Аватар для Mari
 
Регистрация: 30.09.2008
Сообщений: 20
Вес репутации: 0
Mari скоро станет известен
По умолчанию

Цитата:
Сообщение от LSN Посмотреть сообщение
виджеты - зло
+1 никогда не любила виджеты в WP!!
Mari вне форума   Ответить с цитированием
Старый 12.09.2009, 16:42   #8
Специалист
 
Аватар для alfa
 
Регистрация: 13.06.2009
Сообщений: 135
Вес репутации: 186
alfa - как роза среди колючекalfa - как роза среди колючекalfa - как роза среди колючек
По умолчанию

Цитата:
Сообщение от LSN Посмотреть сообщение
Сделал небольшую подборочку шорткодов (short code) для WP. Думаю, что будет полезно.

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

Итак поехали!

Отключаем автосохранение постов в админке (кого как, а меня раздражает :-))

вставляем в functions.php следующий код:
Это лучше оформлять в виде плагина, т.к. в случае правки напрямую в коде functions.php получаете геморрой при обновлениях.
alfa вне форума   Ответить с цитированием
Старый 13.09.2009, 07:00   #9
Починяю примуса
 
Аватар для Atomic
 
Регистрация: 26.09.2008
Сообщений: 1,505
Вес репутации: 285
Atomic - прекрасное будущееAtomic - прекрасное будущееAtomic - прекрасное будущееAtomic - прекрасное будущееAtomic - прекрасное будущееAtomic - прекрасное будущееAtomic - прекрасное будущееAtomic - прекрасное будущееAtomic - прекрасное будущееAtomic - прекрасное будущееAtomic - прекрасное будущее
По умолчанию

return sizeof(explode(" ", $content))+1;
__________________
Починяю разнокалиберные примуса здесь.
Atomic вне форума   Ответить с цитированием
Старый 13.09.2009, 11:22   #10
Мастер
 
Аватар для LSN
 
Регистрация: 27.03.2009
Адрес: ЮГ
Сообщений: 719
Вес репутации: 227
LSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущееLSN - прекрасное будущее
По умолчанию

Цитата:
Сообщение от Atomic Посмотреть сообщение
return sizeof(explode(" ", $content))+1;
если это намек на ошибку, то ее там нет
__________________
Не знать - не стыдно. Стыдно - не учиться.
Отличный сервис синхронизации и обмена файлов между компьютерами. (Free)
при регистрации по ссылке 250MB места в подарок
LSN вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вирусные каталоги сайтов/статей/доски. Свежая подборка. sni Курилка 0 27.05.2008 19:14


Часовой пояс GMT +3, время: 12:37.