Разграничение авторов по произвольным полям

Часто бывает, что при публикации записи необходимо указать стороннего пользователя как автора статьи. Конечно, WP позволяет создать аккаунт для этого автора и назначить ему авторство статьи. Но есть ли необходимость создавать аккаунт, если этот автор опубликуется всего лишь 1 раз? А что произойдет, если этот аккаунт удалить? Эта статья будет привязана к другому пользователю, который будет выбран при удалении. Не плодить же кучу 1-разовых аккаунтов. Тут нам приходят на помощь произвольные поля (custom fields). Для того, чтобы назначить авторство статьи стороннему лицу, при публикации создаем произвольное поле pauthor и назначаем ему в виде значения автора, например Вася Пупкин. Если у Васи Пупкина есть сайт, на который можно сослаться, создаем еще одно поле pauthurl и пишем ссылку http://… как значение.

В файлах темы index.php и single.php разместите вот такой код:

1
2
3
4
5
6
7
8
< ?php
$pauthor = get_post_meta ($post->ID, 'pauthor', TRUE);
if ($pauthor) :
    echo "<a href='".get_post_meta ($post->ID, 'pauthurl', TRUE)."'>".$pauthor."</a>";
else :
    the_author_posts_link();
endif;
?>

Это правило (строки 2, 3, 4 кода) будет выводить сторонних автором простым текстом (либо ссылкой, если укажете), а ваши “штатные” авторы будут выводиться обычной функцией WP the_author_posts_link(); (строка 6 в вышеуказанном коде), если произвольные поля отсутствуют.

Постовые:
доставка букета Москва
сетка рабица

Определение браузера посетителя в WordPress

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
< ?php
add_filter('body_class','browser_body_class');
function browser_body_class($classes) {
	global $is_lynx, $is_gecko, $is_IE, $is_opera, $is_NS4, $is_safari, $is_chrome, $is_iphone;
 
	if($is_lynx) $classes[] = 'lynx';
	elseif($is_gecko) $classes[] = 'gecko';
	elseif($is_opera) $classes[] = 'opera';
	elseif($is_NS4) $classes[] = 'ns4';
	elseif($is_safari) $classes[] = 'safari';
	elseif($is_chrome) $classes[] = 'chrome';
	elseif($is_IE) $classes[] = 'ie';
	else $classes[] = 'unknown';
 
	if($is_iphone) $classes[] = 'iphone';
	return $classes;
}
?>

Эта функия автоматически добавит к тэгу BODY свой CSS-класс:

1
2
<body class="home blog logged-in safari">
</body>

Остается лишь добавить в файл стилей соответствующие классы.

Постовой:
Гостиница Москва Отель в Петербурге размещает бизнесменов по специальным летним ценам.

Слайдер на jQuery

Этот туториал поможет быстро и достаточно легко создать с помощью jQuery вот такой красивый слайдер.

1. Создайте HTML-страницу.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<div id="header">
<div class="wrap">
<div id="slide-holder">
<div id="slide-runner">
<a href=""><img id="slide-img-1" src="images/nature-photo.png" class="slide" alt="" /></a>
<a href=""><img id="slide-img-2" src="images/nature-photo1.png" class="slide" alt="" /></a>
<a href=""><img id="slide-img-3" src="images/nature-photo2.png" class="slide" alt="" /></a>
<a href=""><img id="slide-img-4" src="images/nature-photo3.png" class="slide" alt="" /></a>
<a href=""><img id="slide-img-5" src="images/nature-photo4.png" class="slide" alt="" /></a>
<a href=""><img id="slide-img-6" src="images/nature-photo4.png" class="slide" alt="" /></a>
<a href=""><img id="slide-img-7" src="images/nature-photo6.png" class="slide" alt="" /></a>
<div id="slide-controls">
<p id="slide-client" class="text"><strong>post: </strong><span></span></p>
<p id="slide-desc" class="text"></p>
<p id="slide-nav"></p>
</div>
</div>
</div>
</div>
</div>

2. Создайте CSS-файл.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
*{
margin:0;
padding:0;
}
html{
height:100%;
}
body{
height:100%;
color:#a4a4a4;
cursor:default;
font-size:11px;
line-height:16px;
text-align:center;
background-color:#000;
background-position:50% 0;
background-repeat:no-repeat;
font-family:Tahoma,sans-serif;
}
a:link,a:visited{
color:#fff;
text-decoration:none;
}
a img{
border:0;
}
div.wrap{
width:993px;
margin:0 auto;
text-align:left;
}
div#top div#nav{
float:left;
clear:both;
width:993px;
height:52px;
margin:22px 0 0;
background:url url(images/nav-bg.png) 0 0 no-repeat;
}
div#top div#nav ul{
float:left;
width:700px;
height:52px;
list-style-type:none;
}
div#nav ul li{
float:left;
height:52px;
}
div#nav ul li a{
border:0;
height:52px;
display:block;
line-height:52px;
text-indent:-9999px;
}
div#header{
margin:-1px 0 0;
}
div#video-header{
height:683px;
margin:-1px 0 0;
}
div#header div.wrap{
height:299px;
background:url(images/header-bg.png) 50% 0 no-repeat;
}
div#header div#slide-holder{
z-index:40;
width:993px;
height:299px;
position:absolute;
}
div#header div#slide-holder div#slide-runner{
top:9px;
left:9px;
width:973px;
height:278px;
overflow:hidden;
position:absolute;
}
div#header div#slide-holder img{
margin:0;
display:none;
position:absolute;
}
div#header div#slide-holder div#slide-controls{
left:0;
bottom:228px;
width:973px;
height:46px;
display:none;
position:absolute;
background:url(images/slide-bg.png) 0 0;
}
div#header div#slide-holder div#slide-controls p.text{
float:left;
color:#fff;
display:inline;
font-size:10px;
line-height:16px;
margin:15px 0 0 20px;
text-transform:uppercase;
}
div#header div#slide-holder div#slide-controls p#slide-nav{
float:right;
height:24px;
display:inline;
margin:11px 15px 0 0;
}
div#header div#slide-holder div#slide-controls p#slide-nav a{
float:left;
width:24px;
height:24px;
display:inline;
font-size:11px;
margin:0 5px 0 0;
line-height:24px;
font-weight:bold;
text-align:center;
text-decoration:none;
background-position:0 0;
background-repeat:no-repeat;
}
div#header div#slide-holder div#slide-controls p#slide-nav a.on{
background-position:0 -24px;
}
div#header div#slide-holder div#slide-controls p#slide-nav a{background-image:url(images/silde-nav.png);}
div#nav ul li a{background:url(images/nav.png) no-repeat;}

3. Скопируйте и вставьте этот код в вашу станицу после основного HTML-кода перед закрывающим BODY-тэгом. Вы можете легко изменить заголовок и описание – поменяйте команду “client” для заголовка и команду “desc” для описания.

1
2
3
<script type=" text="" javascript="">
if(!window.slider) var slider={};slider.data=[{"id":"slide-img-1","client":"nature beauty","desc":"nature beauty photography"},{"id":"slide-img-2","client":"nature beauty","desc":"add your description here"},{"id":"slide-img-3","client":"nature beauty","desc":"add your description here"},{"id":"slide-img-4","client":"nature beauty","desc":"add your description here"},{"id":"slide-img-5","client":"nature beauty","desc":"add your description here"},{"id":"slide-img-6","client":"nature beauty","desc":"add your description here"},{"id":"slide-img-7","client":"nature beauty","desc":"add your description here"}];
</script>

4. Скачайте файлы jquery.js и scripts.js и вставьте ссылки на них в секции HEAD.

Демо примера.
Файловый архив.
Оригинал статьи.

Постовые:
Гостиница Англетер примечательна своей богатой историей.
В гостинице Sokos Hotel спецпредложения не являются редкостью и приятно радуют постояльцев.

Автообновление плагинов и ядра WordPress через FTP

Автообновление ядра и плагинов WordPress, впервые представленное в версии 2.7 донельзя облегчило жизнь всем, пользующимся этим движком. Но на некоторых хостингах, в зависимости от настроек, автообновление не работает в автоматическом режиме (вот такая тавтология!) и просит пользователей ввести в предлагаемую вместо обновления форму параметры ФТП – хост, логин, пароль. На одном из хостингов я столкнулся с тем, что данная форма наотрез отказывалась принимать предлагаемые сервер, логин и пароль и сообщала, что “connect failed”. Поиски решения в гугле навели на следующие варианты решения:

1. В форме вместо обычного имени сервера, типа mydomain.ru, попробовать ввести localhost или localhost:21 (это у меня сработало)
2. Чтобы не вводить хост, логин и пароль каждый раз, можно их прописать в файле wp-config.php в таком формате:

1
2
3
define("FTP_HOST", "domain.com");
define("FTP_USER", "ftpusername");
define("FTP_PASS", "ftppassword");

Первая строка – это сервер, там нужно ввести имя сервера в зависимости от того, как он у вас работает – по домену или localhost :). Вторая и третья – FTP-логин и пароль соответственно.
Надеюсь, это кому-нибудь поможет.

Скидки на размещение в гостинице “Невский Палас Отель” и масса спецпредложений.
Петербургская гостиница Астория всегда рада новым постояльцам.

Отображение рубрик в WordPress в 2 колонки

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

1. Нужно найти в файле темы (чаще всего в sidebar.php) стандартный код вывода рубрик, обычно это:

1
< ?php wp_list_categories() ?>

2. Заменить его на

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
< ?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].'';
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>

Все!

Вот тут подскажут как купить мобильный телефон, а здесь можно взглянуть на подержанные автомобили, а после всего этого почитать http://stihi2.ru/.

Отображение тэгов WordPress выпадающим списком

Простой прием позволяет отобразить тэги в вашем блоге в виде выпадающего (dropdown) списка.

1. В файл functions.php текущей темы вставьте следующий код.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
< ?php
function dropdown_tag_cloud( $args = '' ) {
	$defaults = array(
		'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
		'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC',
		'exclude' => '', 'include' => ''
	);
	$args = wp_parse_args( $args, $defaults );
 
	$tags = get_tags( array_merge($args, array('orderby' => 'count', 'order' => 'DESC')) );
	if ( empty($tags) )
		return;
 
	$return = dropdown_generate_tag_cloud( $tags, $args );
	if ( is_wp_error( $return ) )
		return false;
	else
		echo apply_filters( 'dropdown_tag_cloud', $return, $args );
}
 
function dropdown_generate_tag_cloud( $tags, $args = '' ) {
	global $wp_rewrite;
	$defaults = array(
		'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
		'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC'
	);
	$args = wp_parse_args( $args, $defaults );
	extract($args);
 
	if ( !$tags )
		return;
	$counts = $tag_links = array();
	foreach ( (array) $tags as $tag ) {
		$counts[$tag->name] = $tag->count;
		$tag_links[$tag->name] = get_tag_link( $tag->term_id );
		if ( is_wp_error( $tag_links[$tag->name] ) )
			return $tag_links[$tag->name];
		$tag_ids[$tag->name] = $tag->term_id;
	}
 
	$min_count = min($counts);
	$spread = max($counts) - $min_count;
	if ( $spread < = 0 )
		$spread = 1;
	$font_spread = $largest - $smallest;
	if ( $font_spread <= 0 )
		$font_spread = 1;
	$font_step = $font_spread / $spread;
 
	// SQL cannot save you; this is a second (potentially different) sort on a subset of data.
	if ( 'name' == $orderby )
		uksort($counts, 'strnatcasecmp');
	else
		asort($counts);
 
	if ( 'DESC' == $order )
		$counts = array_reverse( $counts, true );
 
	$a = array();
 
	$rel = ( is_object($wp_rewrite) && $wp_rewrite->using_permalinks() ) ? ' rel="tag"' : '';
 
	foreach ( $counts as $tag => $count ) {
		$tag_id = $tag_ids[$tag];
		$tag_link = clean_url($tag_links[$tag]);
		$tag = str_replace(' ', '&nbsp;', wp_specialchars( $tag ));
		$a[] = "\t<option value='$tag_link'>$tag ($count)</option>";
	}
 
	switch ( $format ) :
	case 'array' :
		$return =& $a;
		break;
	case 'list' :
		$return = "<ul class='wp-tag-cloud'>\n\t<li>";
		$return .= join("</li>\n\t<li>", $a);
		$return .= "</li>\n</ul>\n";
		break;
	default :
		$return = join("\n", $a);
		break;
	endswitch;
 
	return apply_filters( 'dropdown_generate_tag_cloud', $return, $tags, $args );
}
?>

2. После этого в нужном месте вашей темы (чаще всего в файле sidebar.php) вставьте вот такой код:

1
2
3
4
<select name="tag-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
	<option value="#">Тэги</option>
	< ?php dropdown_tag_cloud('number=0&order=asc'); ?>
</select>

Как и многое другое, подсмотрено на сайте WpRecipes.

Постовые:
недвижимость москва
продажа коттеджей в подмосковье
http://www.ipoteka.irr.ru/

Smub.it – очередной сократитель ссылок

Smub.It – очередной сократитель ссылок (сколько их уже в мире???), который в принципе можно было бы и пропустить, но его основное и принципиальное отличие от десятков других в том, что для его использования не нужно переходить на страницу самого сервиса. Чтобы с помощью Smub.it сократить ссылку, нужно всего лишь ввести smub.it/ перед той ссылкой, которую вы хотите сократить, например:

smub.it/http://livejournal.com

и нажать Enter. Ссылка будет сокращена, после чего ей можно поделиться (расшарить) в Twitter, Facebook, MySpace, Digg, StumbleUpon, FriendFeed, LinkedIn, занести в закладки или отправить по почте.

Smub.it

Существуют букмарклеты для Mac и iPhone.

Постовые:
продажа спецтехники
audi
продажа подержанных автомобилей

Flick.To.Twitt – сервис для публикации фото в Flickr и анонса их в Twitter

flick.to.twitt – очередной сервис для работы с Twitter и Flickr. Но не по отдельности, а для того, чтобы загрузить фото в аккаунт во Flickr’e и тут же объявить об этом в Twitter’e. Конечно, для того, чтобы им пользоваться, надо иметь аккаунты и там и там.

Сервис не требует регистрации и представляет из себя некий пошаговый мастер по загрузке фото в Flickr и дальнейшему анонсу их в Twitter.

1. Сначала надо пройти процесс загрузки фото. Для этого flick.to.twitt перебросит пользователя на авторизацию на Yahoo!, где потребуется разрешить flick.to.twitt загружать фото в Flickr. После получения разрешения (можно и отказаться :-)!) происходит возврат на flick.to.twitt и предлагается пройти авторизацию на Twitter. Там проходит аналогичный процесс – нужно разрешить flick.to.twitt авторизовываться на Twitter’e.

2. Теперь можно приступить к загрузке фото. Выбирается photoset (альбом) на Фликре, название фото, собственно файл для загрузки и статус в Твиттере. Опционально можно запретить данному фото появляться в Твиттер-ленте. Кстати для загрузки разрешены не только файлы в форматах GIF, JPG и PNG, но и TIFF.

3. Если все прошло успешно, ваше фото и установленный статус появятся в Твиттеровком таймлайне (ленте).

Постовые:
продажа квартир в Москве
подержанные автомобили
работа в москве

10 приемов использования произвольных полей в WordPress

Это статья – сокращенный и достаточно вольный перевод статьи “Custom Fields Hacks For WordPress”, опубликованной в Smashing Magazine (ссылка на оригинал дана в конце). Перечислены 10 способов интересного применения custom fields (пользовательских полей) в WordPress.

1. Установка дата окончания поста.
Этот прием поможет установить дату окончания публикации поста, если вам нужно отображать запись в течение ограниченного времени.
В теме заменяем цикл вывода на следующий:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
< ?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 example...  
             the_title();  
             the_excerpt();  
         }  
     endwhile;  
endif;  
?>

При написании поста создается пользовательское поле с ключом expiration и временем в формате mm/dd/yyyy 00:00:00 в качестве значения. Пост перестанет отображаться после наступления указанной даты и времени.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
< ?php if (have_posts()) :  
    while (have_posts()) : the_post();  
         $customField = get_post_custom_values("full");  
         if (isset($customField[0])) {  
              //Custom field is set, display a full post  
              the_title();  
              the_content();  
         } else {  
              // No custom field set, let's display an excerpt  
              the_title();  
              the_excerpt();  
    endwhile;  
endif;  
?>

Данный код отображает все посты в виде анонсов. Чтобы отобразить выбранный пост полностью, надо создать поле с ключом full и задать ему любое значение.

3. Отображение музыки и настроения в посте.
У пользователей ЖЖ есть две удобные опции при написании поста, которые пока отсутствуют в WordPress – отображение текущих музыки и настроения. Добавить их в WP достаточно просто – нужно в файле single.php или index.php текущей темы добавить следующий код:

1
2
3
4
$customField = get_post_custom_values("mood");  
if (isset($customField[0])) {  
    echo "Mood: ".$customField[0];  
}

В посте создаем поле с ключом mood и как значение вписываем настроение.

4. Добавление META-описание к постам.
Хоть META-информация и не так уже важна для поисковиков, как раньше, все же не помешает иметь META-описание для ваших записей.
В файл header.php добавьте этот код в любом месте между тэгами <head> и </head>

1
2
3
4
5
6
7
8
9
10
11
12
13
<meta name="description" content="  
<?php if ( (is_home()) || (is_front_page()) ) {  
    echo ('Your main description goes here');  
} elseif(is_category()) {  
    echo category_description();  
} elseif(is_tag()) {  
    echo '-tag archive page for this blog' . single_tag_title();  
} elseif(is_month()) {  
    echo 'archive page for this blog' . the_time('F, Y');  
} else {  
    echo get_post_meta($post->ID, "Metadescription", true);  
}?>">
</meta>

Этот прием использует тэги WordPress для генерации meta-описаний. На страницах категорий, тэгов, архивов и главной используется статическая meta-информация. Отредактируйте строки 3, 7 и 9 в коде для определения ваших собственных значений. Для записей создайте поле Metadescription и впишите значения.

5. Ссылки на внешние ресурсы.
Как создать ссылку в заголовке на внешний ресурс “напрямую”, без ссылки на сам пост (как это бывает на Хабре – прим. перев.)? Для этого есть такой эстетичный способ. Сначала в файл functions.php вставляем следующий код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function print_post_title() {  
    global $post;  
    $thePostID = $post->ID;  
    $post_id = get_post($thePostID);  
    $title = $post_id->post_title;  
    $perm  = get_permalink($post_id);  
    $post_keys = array(); $post_val  = array();  
    $post_keys = get_post_custom_keys($thePostID);  
 
    if (!emptyempty($post_keys)) {  
      foreach ($post_keys as $pkey) {  
            if ($pkey=='url1' || $pkey=='title_url' || $pkey=='url_title') {  
              $post_val = get_post_custom_values($pkey);  
            }  
      }  
      if (emptyempty($post_val)) {  
            $link = $perm;  
      } else {  
            $link = $post_val[0];  
      }  
    } else {  
      $link = $perm;  
    }  
    echo '<h2><a href="'.$link.'" rel="bookmark" title="'.$title.'">'.$title.'</a></h2>';  
}

После этого в файле index.php стандартный код вывода заголовков:

1
<h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to < ?php the_title(); ?>">< ?php the_title(); ?></a></h2>

заменяем на

1
< ?php print_post_title() ?>

Теперь при написании поста нужно создать поле со значением url1 или title_url или url_title и вписать ссылку на внешний ресурс как значение. Заголовок поста при этом станет не ссылкой на сам пост, как обычно, а ссылкой на внешний ресурс (снова вспомним Хабр – прим. перев.). Если значение поля не найдено, заголовок будет традиционно вести на сам пост.

6. Встроенные CSS-стили.
Иногда нужно добавить к записям дополнительные стили CSS. Конечно, всегда можно использовать встроенные (inline), но это иногда не очень удобно. Данный прием поможет легко создавать дополнительные классы CSS и вставлять их в заголовок блога.
В файле header.php в любом месте между тэгами <head> и </head> вставляем код

1
2
3
4
5
6
7
8
9
< ?php if (is_single()) {  
    $css = get_post_meta($post->ID, 'css', true);  
    if (!emptyempty($css)) { ?>  
        <style type="text/css">  
        < ?php echo $css; ?>  
        </style><style>  
    < ?php }  
} ?>
</style>

При написании записи создаем поле css и вписываем нужный CSS как значение. Вот настолько просто!

7. Переопределение <TITLE>
Тэг title чрезвычайно важен для SEO и привлечения траффика на ваш блог. И, кстати, большинство тем для WP поставляется без оптимизированного тэга title. Сторонние плагины, типа All in One SEO Pack могут помочь решить задачу, но так же этого можно достигнуть с помощью пользовательских полей.
В файле header.php заменяем код в <title> </title> на

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<title> 
< ?php if (is_home () ) {  
    bloginfo('name');  
} elseif ( is_category() ) {  
    single_cat_title(); echo ' - ' ; bloginfo('name');  
} elseif (is_single() ) {  
    $customField = get_post_custom_values("title");  
    if (isset($customField[0])) {  
        echo $customField[0];  
    } else {  
        single_post_title();  
    }  
} elseif (is_page() ) {  
    bloginfo('name'); echo ': '; single_post_title();  
} else {  
    wp_title('',true);  
} ?>  
</title>

При написании поста создаем поле title и вписываем нужное значение.

8. Блокирование поисковых систем от индексации определенных постов.
Вы хотели когда-нибудь запретить поисковику индексировать определенные записи (например, что-то очень личное)? Но при этом разрешить его читать простым читателям. Это достаточно просто с помощью… вы уже поняли чего.
Сначала нужно найти ID поста, который подлежит сокрытию от вездесущих поисковиков. В примере используем ID 17.
В файл header.php добавьте этот код в любом месте между тэгами <head> и </head>

1
2
3
4
5
< ?php $cf = get_post_meta($post->ID, 'noindex', true);  
    if (!emptyempty($cf)) {  
    echo '<meta name="robots" content="noindex"/>';  
}  
?>

Пользовательское поле noindex и ID поста как значение запретят поисковым системам индексировать контент данного поста.

9. Получить или вывести значение любого поля.
Теперь вы используете множество пользовательских полей. Как насчет того, чтобы автоматически получать все значения? В файл functions.php вставляется вот такой код:

1
2
3
4
5
function get_custom_field_value($szKey, $bPrint = false) {  
    global $post;  
    $szValue = get_post_meta($post->ID, $szKey, true);  
    if ( $bPrint == false ) return $szValue; else echo $szValue;  
}

Теперь для вызова функции и получения значения полей, используем такой вот код:

1
2
3
< ?php if ( function_exists('get_custom_field_value') ){  
        get_custom_field_value('featured_image', true);  
} ?>

Сначала используется функция PHP function_exists(), чтобы удостовериться что функция get_custom_field_value определена в теме. Первый аргумент функции – название поля (в этом случае featured_image) и второй – получение значения (true) или вызов его для дальнейшего использования (false).

10. Вывод кнопик “Digg This” только при необходимости.
Очень удобная и хорошая идея использовать кнопку “Digg This”, чтобы получать траффик с Digg. Но нужна ли эта кнопка ко всем постам? Вряд ли стоит использовать Digg, например, для объявления изменений на вашем сайте. Нас снова выручат пользовательские поля.
Открываем файл single.php и вставляем этот куда туда, где мы хотим видеть кнопку “Digg This”.

1
2
3
4
< ?php $cf = get_post_meta($post->ID, 'digg', true);  
  if (!emptyempty($cf)) {  
  echo 'http://digg.com/tools/diggthis.js" type="text/javascript">'}
?>

Пользовательское поле digg с любым значением отобразит кнопку “Digg This” (javascript, использованный в коде, покажет кнопку, предоставленную самим Digg). Если значения нет, кнопка не будет показана.

Бонус. Отображение миниатюр (thumbnails) рядом с записями.
Это достаточно известный прием и он успешно используется очень многими. Но некоторые все еще не знают, как красиво показать миниатюры рядом с постами на странице.

1. Создайте изображение по умолчанию в редакторе вроде PhotoShop или Gimp. Размер в приведенном примере 200х200, но конечно, это на ваше усмотрение. Назовите изображение default.gif и загрузите его в папку images в текущей теме.
2. В файле index.php вставьте это код в то место, где вы желаете видеть миниаютюры.

1
2
3
4
5
6
7
< ?php $postimageurl = get_post_meta($post->ID, 'post-img', true);  
if ($postimageurl) {  
?>  
      <a href="<?php the_permalink(); ?>" rel="bookmark"><img src="<?php echo $postimageurl; ?/>" alt="Post Pic" width="200" height="200" /></a>  
< ?php } else { ?>  
      <a href="<?php the_permalink(); ?>" rel="bookmark"><img src="<?php bloginfo('template_url'); ?/>/images/wprecipes.gif" alt="Screenshot" width="200" height="200" /></a>  
< ?php } ?>

3. При написании создавайте пользовательское поле с ключом post-img и путь к изображению, которое вы хотели бы отобразить как миниатюру, как значение его.

Постовые:
АТС Panasonic
загородные дома в подмосковье

Оригинал статьи на Smashing Magazine.

Перекрытие встроенных стилей с помощью CSS

Это достаточно известный и давно уже не новый хак, но я все же решил его описать (скорее для себя).

Если в документе имеется встроенный (inline) стиль, который вы не можете удалить, и который вам необходимо использовать по-другому, то можно достаточно легко его перекрыть в основном файле стилей.

Берем для примера вот такой код:

<div style="background: red;">
The inline styles for this div should make it red.
</div>

Его можно перекрыть таким приемом:

div[style] {
background: yellow !important;
}

Не работает в ИЕ6, но оно нам надо?…

Подсмотрено здесь.

Постовые:
apartments in odessa ukraine
туры в болгарию
replica watches
болгария отели