С нами с 15.12.06
Сообщения: 673
Рейтинг: 686
|
Добавлено: 16/08/10 в 04:51 |
Надыбал тему Revolution Church в которой реализована такая фича:
На главной странице выводятся посты из определенных категорий указанных в настройках темы с тумбинашкой, названием поста и указанной длинной текста поста. Ссылка на тумбинашку указывается в дополнительном поле поста под названием "thumbnail". Если ничего не указано, то отображается картинка по умолчанию под названием http://путь_к_теме/images/thumbnail.png
В шаблоне темы в файле home.php за все это отвечает код:
Код: [развернуть] |
<div id="homepageleft">
<div class="hpfeatured">
<h3>Статьи из рубрики <?php echo get_option('revchurch_lfeatured_cat'); ?></h3>
<?php $f_id = get_cat_id(get_option('revchurch_lfeatured_cat')); $f_num = get_option('revchurch_lfeatured_cat_num'); $recent = new WP_Query("cat={$f_id}&showposts={$f_num}"); while($recent->have_posts()) : $recent->the_post();?>
<?php if( get_post_meta($post->ID, "thumbnail", true) ): ?>
<a href="<?php the_permalink() ?>" rel="bookmark"><img style="float:left;margin:0px 10px 0px 0px;" src="<?php echo get_post_meta($post->ID, "thumbnail", true); ?>" alt="<?php the_title(); ?>" /></a>
<?php else: ?>
<a href="<?php the_permalink() ?>" rel="bookmark"><img style="float:left;margin:0px 10px 0px 0px;" src="<?php bloginfo('template_url'); ?>/images/thumbnail.png" alt="<?php the_title(); ?>" /></a>
<?php endif; ?>
<b><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></b>
<?php $f_length = get_option('revchurch_lfeatured_length'); the_content_limit( $f_length, ""); ?>
<div style="border-bottom:1px dotted #94B1DF; margin-bottom:10px; padding:0px 0px 10px 0px; clear:both;"></div>
<?php endwhile; ?>
<b><a href="<?php echo get_category_link(get_cat_id(get_option('revchurch_lfeatured_cat')));?>" rel="bookmark">Ещё статьи из этой рубрики</a></b>
</div>
|
для наглядности приведу код файла functions.php (в нем настройки длинны текста поста и количества выводимых постов).
Код: [развернуть] |
<?php
add_filter('comments_template', 'legacy_comments');
function legacy_comments($file) {
if(!function_exists('wp_list_comments')) : // WP 2.7-only check
$file = TEMPLATEPATH . '/legacy.comments.php';
endif;
return $file;
}
?>
<?php include(TEMPLATEPATH."/tools/breadcrumb-navigation-xt.php");?>
<?php
if ( function_exists('register_sidebars') )
register_sidebar(array('name'=>'Sidebar Top',));
register_sidebar(array('name'=>'Sidebar Bottom Left',));
register_sidebar(array('name'=>'Sidebar Bottom Right',));
$mx_cat_array = array();
$mx_categories = get_categories('');
foreach ($mx_categories as $mx_cat) {
array_push($mx_cat_array, $mx_cat->cat_name);
}
$themename = "Revolution Church";
$shortname = "revchurch";
$options = array (
array( "name" => "Общие параметры",
"type" => "heading"),
array( "name" => "Feedburner ID",
"desc" => "Как найти свой <strong>Google Feedburner ID</strong> читайте <a href='http://blogovod.co.cc/?p=426#feedburner'>здесь</a>.<br /><br />",
"id" => $shortname."_feedburner_id",
"std" => "Введите ваш Feedburner ID для подписки по Email",
"type" => "text"),
array( "name" => "Баннер 468x60",
"desc" => "Код рекламного баннера 468x60 в шапке.<br /><br />",
"id" => $shortname."_ad_468",
"std" => "Введите код баннера 468x60",
"type" => "textarea"),
array( "name" => "Баннер 120x600",
"desc" => "Код рекламного баннера 120x600 в боковой панели.<br /><br />",
"id" => $shortname."_ad_120",
"std" => "Введите код баннера 120x600",
"type" => "textarea"),
array( "name" => "Баннер 468x60 от AdSense",
"desc" => "Код рекламного баннера Google AdSense 468x60 в статье, между текстом статьи и комментариями.<br /><br />",
"id" => $shortname."_adsense_468",
"std" => "Введите код баннера 468x60 от Google AdSense",
"type" => "textarea"),
array( "name" => "Баннер 300x250 от AdSense",
"desc" => "Код рекламного баннера 300x250 от Google AdSense в боковой пенели.<br /><br />",
"id" => $shortname."_adsense_300",
"std" => "Введите код баннера 300x250 от Google AdSense",
"type" => "textarea"),
array( "name" => "Видеоклип",
"desc" => "Анонсируемый видеоклип в боковой панели. <br /> Рекомендуемый размер клипа 300x250, не забудьте изменить код клипа.<br /><br /><br /><br />",
"id" => $shortname."_video",
"std" => "Введите код клипа",
"type" => "textarea"),
array( "name" => "Параметры главной страницы",
"type" => "heading"),
array( "name" => "Анонсируемая рубрика",
"desc" => "Статьи из этой рубрики будут выводиться в левой верхней секции анонсов главной страницы<br /><br />",
"id" => $shortname."_lfeatured_cat",
"std" => "Без рубрики",
"type" => "select",
"options" => $mx_cat_array),
array( "name" => "Количество статей",
"desc" => "Количество статей, выводимых в левой верхней секции анонсов на главной странице<br /><br />",
"id" => $shortname."_lfeatured_cat_num",
"std" => "3",
"type" => "text"),
array( "name" => "Длина анонса",
"desc" => "Длина анонса в символах, включая заголовок, в левой верхней секции анонсов.<br /><br /><br /><br />",
"id" => $shortname."_lfeatured_length",
"std" => "80",
"type" => "text"),
array( "name" => "Анонсируемая рубрика",
"desc" => "Статьи из этой рубрики будут выводиться в правой верхней секции анонсов главной страницы<br /><br />",
"id" => $shortname."_rfeatured_cat",
"std" => "Без рубрики",
"type" => "select",
"options" => $mx_cat_array),
array( "name" => "Количество статей",
"desc" => "Количество статей, выводимых в правой верхней секции анонсов на главной странице<br /><br />",
"id" => $shortname."_rfeatured_cat_num",
"std" => "3",
"type" => "text"),
array( "name" => "Длина анонса",
"desc" => "Длина анонса в символах, включая заголовок, в правой верхней секции анонсов.<br /><br /><br /><br />",
"id" => $shortname."_rfeatured_length",
"std" => "80",
"type" => "text"),
array( "name" => "Анонсируемая рубрика",
"desc" => "Статьи из этой рубрики будут выводиться в нижней секции анонсов главной страницы<br /><br />",
"id" => $shortname."_bfeatured_cat",
"std" => "Без рубрики",
"type" => "select",
"options" => $mx_cat_array),
array( "name" => "Количество статей",
"desc" => "Количество статей, выводимых в нижней секции анонсов на главной странице<br /><br />",
"id" => $shortname."_bfeatured_cat_num",
"std" => "3",
"type" => "text"),
array( "name" => "Длина анонса",
"desc" => "Длина анонса в символах, включая заголовок, в нижней секции анонсов.<br /><br /><br /><br />",
"id" => $shortname."_bfeatured_length",
"std" => "350",
"type" => "text"),
array( "name" => "Параметры шаблона страницы \"Блог\"",
"type" => "heading"),
array( "name" => "Рубрика",
"desc" => "Статьи из этой рубрики будут выводиться на странице заданной шаблоном \"Блог\"<br /><br />",
"id" => $shortname."_pblog_cat",
"std" => "Без рубрики",
"type" => "select",
"options" => $mx_cat_array),
array( "name" => "Количество статей",
"desc" => "Количество статей, выводимых на странице, заданной шаблоном \"Блог\"<br /><br />",
"id" => $shortname."_pblog_cat_num",
"std" => "5",
"type" => "text")
);
function mytheme_add_admin() {
global $themename, $shortname, $options;
if ( $_GET['page'] == basename(__FILE__) ) {
if ( 'save' == $_REQUEST['action'] ) {
foreach ($options as $value) {
if($value['type'] != 'multicheck'){
update_option( $value['id'], $_REQUEST[ $value['id'] ] );
}else{
foreach($value['options'] as $mc_key => $mc_value){
$up_opt = $value['id'].'_'.$mc_key;
update_option($up_opt, $_REQUEST[$up_opt] );
}
}
}
foreach ($options as $value) {
if($value['type'] != 'multicheck'){
if( isset( $_REQUEST[ $value['id'] ] ) ) { update_option( $value['id'], $_REQUEST[ $value['id'] ] ); } else { delete_option( $value['id'] ); }
}else{
foreach($value['options'] as $mc_key => $mc_value){
$up_opt = $value['id'].'_'.$mc_key;
if( isset( $_REQUEST[ $up_opt ] ) ) { update_option( $up_opt, $_REQUEST[ $up_opt ] ); } else { delete_option( $up_opt ); }
}
}
}
header("Location: themes.php?page=functions.php&saved=true");
die;
} else if( 'reset' == $_REQUEST['action'] ) {
foreach ($options as $value) {
if($value['type'] != 'multicheck'){
delete_option( $value['id'] );
}else{
foreach($value['options'] as $mc_key => $mc_value){
$del_opt = $value['id'].'_'.$mc_key;
delete_option($del_opt);
}
}
}
header("Location: themes.php?page=functions.php&reset=true");
die;
}
}
add_theme_page("Параметры ".$themename, "Параметры $themename", 'edit_themes', basename(__FILE__), 'mytheme_admin');
}
function mytheme_admin() {
global $themename, $shortname, $options;
if ( $_REQUEST['saved'] ) echo '<div id="message" class="updated fade"><p><strong>Параметры '.$themename.' сохранены.</strong></p></div>';
if ( $_REQUEST['reset'] ) echo '<div id="message" class="updated fade"><p><strong>Параметры '.$themename.' сброшены.</strong></p></div>';
?>
<div class="wrap">
<h2>Параметры <?php echo $themename; ?></h2>
<form method="post">
<table class="optiontable">
<?php foreach ($options as $value) {
switch ( $value['type'] ) {
case 'text':
option_wrapper_header($value);
?>
<input style="width:400px;" name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" type="<?php echo $value['type']; ?>" value="<?php if ( get_settings( $value['id'] ) != "") { echo get_settings( $value['id'] ); } else { echo $value['std']; } ?>" />
<?php
option_wrapper_footer($value);
break;
case 'select':
option_wrapper_header($value);
?>
<select style="width:240px;" name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>">
<?php foreach ($value['options'] as $option) { ?>
<option<?php if ( get_settings( $value['id'] ) == $option) { echo ' selected="selected"'; }?>><?php echo $option; ?></option>
<?php } ?>
</select>
<?php
option_wrapper_footer($value);
break;
case 'textarea':
$ta_options = $value['options'];
option_wrapper_header($value);
?>
<textarea name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" style="width:400px;height:100px;"><?php
if( get_settings($value['id']) != "") {
echo stripslashes(get_settings($value['id']));
}else{
echo $value['std'];
}?></textarea>
<?php
option_wrapper_footer($value);
break;
case "radio":
option_wrapper_header($value);
foreach ($value['options'] as $key=>$option) {
$radio_setting = get_settings($value['id']);
if($radio_setting != ''){
if ($key == get_settings($value['id']) ) {
$checked = "checked=\"checked\"";
} else {
$checked = "";
}
}else{
if($key == $value['std']){
$checked = "checked=\"checked\"";
}else{
$checked = "";
}
}?>
<input type="radio" name="<?php echo $value['id']; ?>" value="<?php echo $key; ?>" <?php echo $checked; ?> /><?php echo $option; ?><br />
<?php
}
option_wrapper_footer($value);
break;
case "checkbox":
option_wrapper_header($value);
if(get_settings($value['id'])){
$checked = "checked=\"checked\"";
}else{
$checked = "";
}
?>
<input type="checkbox" name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" value="true" <?php echo $checked; ?> />
<?php
option_wrapper_footer($value);
break;
case "multicheck":
option_wrapper_header($value);
foreach ($value['options'] as $key=>$option) {
$pn_key = $value['id'] . '_' . $key;
$checkbox_setting = get_settings($pn_key);
if($checkbox_setting != ''){
if (get_settings($pn_key) ) {
$checked = "checked=\"checked\"";
} else {
$checked = "";
}
}else{
if($key == $value['std']){
$checked = "checked=\"checked\"";
}else{
$checked = "";
}
}?>
<input type="checkbox" name="<?php echo $pn_key; ?>" id="<?php echo $pn_key; ?>" value="true" <?php echo $checked; ?> /><label for="<?php echo $pn_key; ?>"><?php echo $option; ?></label><br />
<?php
}
option_wrapper_footer($value);
break;
case "heading":
?>
<tr valign="top">
<td colspan="2" style="text-align: center;"><h3><?php echo $value['name']; ?></h3></td>
</tr>
<?php
break;
default:
break;
}
}
?>
</table>
<p class="submit">
<input name="save" type="submit" value="Сохранить параметры" />
<input type="hidden" name="action" value="save" />
</p>
</form>
<form method="post">
<p class="submit">
<input name="reset" type="submit" value="Сбросить" />
<input type="hidden" name="action" value="reset" />
</p>
</form>
<?php
}
function option_wrapper_header($values){
?>
<tr valign="top">
<th scope="row"><?php echo $values['name']; ?>:</th>
<td>
<?php
}
function option_wrapper_footer($values){
?>
</td>
</tr>
<tr valign="top">
<td> </td><td><small><?php echo $values['desc']; ?></small></td>
</tr>
<?php
}
function mytheme_wp_head() {
$stylesheet = get_option('revmag_alt_stylesheet');
if($stylesheet != ''){?>
<?php }
}
add_action('wp_head', 'mytheme_wp_head');
add_action('admin_menu', 'mytheme_add_admin');
?>
<?php function the_content_limit($max_char, $more_link_text = '(далее ...)', $stripteaser = 0, $more_file = '') {
$content = get_the_content($more_link_text, $stripteaser, $more_file);
$content = apply_filters('the_content', $content);
$content = str_replace(']]>', ']]>', $content);
$content = strip_tags($content);
if (strlen($_GET['p']) > 0) {
echo "<p>";
echo $content;
echo " <a href='";
the_permalink();
echo "'>"."Читать далее →</a>";
echo "</p>";
}
else if ((strlen($content)>$max_char) && ($espacio = strpos($content, " ", $max_char ))) {
$content = substr($content, 0, $espacio);
$content = $content;
echo "<p>";
echo $content;
echo "...";
echo " <a href='";
the_permalink();
echo "'>".$more_link_text."</a>";
echo "</p>";
}
else {
echo "<p>";
echo $content;
echo " <a href='";
the_permalink();
echo "'>"."Читать далее →</a>";
echo "</p>";
}
}
?>
|
Хочу сделать такое же в другой теме, только чтобы посты выводились не из определенной категории, а как обычно, самые последние (и в том количестве, которое указано в настройках ВП), при этом настройки длинны отображения текста поста должны указываться в самом коде файла home.php, а не в functions.php.
Помогите подправить первый код.
|
|
|
|
С нами с 06.03.05
Сообщения: 6216
Рейтинг: 7375
|
Добавлено: 16/08/10 в 09:08 |
Код: | <?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>"><img src="<?php if( get_post_meta($post->ID, "thumbnail", true) ): ?><?php echo get_post_meta($post->ID, "thumbnail", true); ?><?php else: ?>ПУТЬ К ДЕФОЛТ КАРТИНКИ<?php endif; ?>" alt="<?php the_title(); ?>" /></a>
<?php the_excerpt();?>
<?php endwhile; ?>
<?php endif; ?>
|
понятно что это просто функционал, форматирование вывода уже сам сделаешь
в начало файл home.php запихни то что внизу
Код: | <?php
function new_excerpt_length($length) {
return 20;
}
add_filter('excerpt_length', 'new_excerpt_length');
function new_excerpt_more($excerpt) {
return str_replace('[...]', '...', $excerpt);
}
add_filter('wp_trim_excerpt', 'new_excerpt_more');
?> |
20 - это кол-во слов
|
|
|
|
С нами с 16.07.06
Сообщения: 886
Рейтинг: 892
|
Добавлено: 16/08/10 в 10:40 |
log писал: | Надыбал тему Revolution Church в которой реализована такая . |
Тема кстати платная
|
|
|
|
С нами с 15.12.06
Сообщения: 673
Рейтинг: 686
|
Добавлено: 17/08/10 в 03:09 |
Skat: спасибо, потестил, то что надо
|
|
|
|
С нами с 15.12.06
Сообщения: 673
Рейтинг: 686
|
Добавлено: 17/08/10 в 23:32 |
Еще вопрос, а как вывести енное количество постов из указанной категории?
Понимаю, что в том примере, что я привел там это и происходит, но настройки все в functions.php, а мне нужно чтобы одним кодом все вывести можно было в любом файле...
|
|
|
|
С нами с 06.03.05
Сообщения: 6216
Рейтинг: 7375
|
Добавлено: 18/08/10 в 08:52 |
|
|
|
|
С нами с 15.12.06
Сообщения: 673
Рейтинг: 686
|
Добавлено: 18/08/10 в 14:02 |
Супер! Еще раз спасибо, оценил!
|
|
|
|
С нами с 15.12.06
Сообщения: 673
Рейтинг: 686
|
Добавлено: 20/08/10 в 12:05 |
И снова вопрос, а как сделать такое:
в Custom Fields есть поле "galleryimg"
в котором с каждой новой строчки добавлено несколько изображений, например:
mysite.com/image1.jpg
mysite.com/image2.jpg
mysite.com/image3.jpg
и т.д.
и есть поле "alttext", в котором прописан альт, например: "Alternative text"
как сделать так чтобы в посте получилась галерея:
Код: |
<img src="mysite.com/image1.jpg" alt="Alternative text" /><br>
<img src="mysite.com/image2.jpg" alt="Alternative text" /><br>
<img src="mysite.com/image3.jpg" alt="Alternative text" /><br>
|
|
|
|
|
С нами с 15.12.06
Сообщения: 673
Рейтинг: 686
|
Добавлено: 21/08/10 в 05:10 |
Разобрался, что в посте "Alternative text" можно вывести так:
Код: | <?php if( get_post_meta($post->ID, "alttext", true) ): ?><?php echo 'alt="'; echo get_post_meta($post->ID, "alttext", true); echo '"'; ?><?php endif; ?> |
А целиком поле "galleryimg" так:
Код: |
<?php if( get_post_meta($post->ID, "galleryimg", true) ): ?><?php echo get_post_meta($post->ID, "galleryimg", true); ?><?php else: ?><?php bloginfo('template_url'); ?>/img/articleimg.png<?php endif; ?>
|
Но как засунуть "galleryimg" в масив и перебрать его с соединением поля "alttext" ума не приложу. Проггеры, что думаете?
|
|
|
|
С нами с 22.10.03
Сообщения: 598
Рейтинг: 706
|
Добавлено: 21/08/10 в 08:42 |
Код: |
<?php if( get_post_meta($post->ID, "galleryimg", true) ): ?><?php
$gi=get_post_meta($post->ID, "galleryimg", true);
$at=get_post_meta($post->ID, "alttext", true);
echo "<img src='mysite.com/$gi' alt='$at' /><br>";
?><?php else: ?><?php bloginfo('template_url'); ?>/img/articleimg.png<?php endif; ?>
|
Я правда не прогер.
|
|
|
|
С нами с 15.12.06
Сообщения: 673
Рейтинг: 686
|
Добавлено: 21/08/10 в 08:52 |
Хорошая попытка, но так работать не будет.
Прикол в том, что поле "galleryimg" содержит несколько ссылок, каждая из которых располагается в новой строке, т.е. в столбик ссылки вставлены.
Поэтому тут надо загнать "galleryimg" в массив и перебрать его соединив с полем "alttext"
В общем самое сложное - это массив для меня. Никак не могу вдуплить как реализовать вывод...
|
|
|
|
С нами с 15.12.06
Сообщения: 673
Рейтинг: 686
|
Добавлено: 23/08/10 в 01:21 |
уже не актуально!
|
|
|
|
Текстовая реклама в форме ответа Заголовок и до четырех строчек текста Длина текста до 350 символов Купить рекламу в этом месте! |
|
Спонсор раздела
|