1

Тема: Создание анонса (more и noteaser)

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

<!--more-->

На главной странице будет отображен текст до этой конструкции.


Если вы хотите получить полный аналог поля «Цитата» (в админ-панели), то нужно указать:

<!--more-->
<!--noteaser-->

В этом случае на главной странице будет отображен текст до этой конструкции, а на странице записи его уже не будет.


http://maxsite.org/delenie-stranits-v-wordpresse

Злой админ

2

Re: Создание анонса (more и noteaser)

проблемы с тегом <!-- more -->.........

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

кто что скажет, как с этим можно бороться?

да, WP там стоит 2.0.9 кажется.
может проще будет перейти на 2.2.2 если там нет таких проблем?

Будь вебмастером, а не сапожником!
Скажи свое громкое НЕТ Сапе!!!

3

Re: Создание анонса (more и noteaser)

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

только что проделал все то же самое - никакой проблемы не было обнаружено.....

Будь вебмастером, а не сапожником!
Скажи свое громкое НЕТ Сапе!!!

4

Re: Создание анонса (more и noteaser)

думаю, что тег more влепился между <strong> и </strong>, вот и получилось, что весь текст стал жирным в категории. думаю так дело было

Едет вебмастер в поезде и слышит: <td></td> … <td></td> … <td></td>
шаблоны Темы

5 (04-11-2007 23:14:24 отредактировано Vassilyev)

Re: Создание анонса (more и noteaser)

Плагин Evermore http://www.thunderguy.com/semicolon/wor … ss-plugin/ автоматически разделяет пост тегом <!–more–>  и автоматизирует  создание анонсов  smile  Назовём его вольным переводом Авторезка  wink Сохраните нижеследущее под названием evermore.php


<?php
/*
Plugin Name: Evermore
Plugin URI: http://www.thunderguy.com/semicolon/wordpress/evermore-wordpress-plugin/
Description: Abbreviate all posts when viewed on multiple post pages. This makes all posts behave as if there is a "&lt;!--more--&gt;" at an appropriate spot inside the content.
Version: 2.2
Author: Bennett McElwee
Author URI: http://www.thunderguy.com/semicolon/

$Revision$

Copyright (C) 2005-06 Bennett McElwee

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the
Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

The GNU General Public License is also available at
http://www.gnu.org/copyleft/gpl.html

Bennett McElwee, bennett at thunderguy dotcom
*/

/*
INSTALLATION

1. Copy this file into the plugins directory in your WordPress installation (wp-content/plugins).
2. Log in to WordPress Admin. Go to the Plugins page and click Activate for this plugin.
3. If desired, go to the Options page, click Evermore and adjust settings.

USAGE

Evermore automatically abbreviates all posts when they appear on a multiple-post page such as the main blog page. It has the same effect as putting  <!--more--> after the specified paragraph of every post. All formatting and HTML tags are preserved in the abbreviated post.

If the post already has a <!--more--> in it, then this plugin does nothing to it and the existing <!--more--> will behave as usual.

If you want to disable the plugin for any specific post, then include the codeword <!--nevermore--> in the post. This won't show up in the post, but it will prevent the post from being abbreviated by Evermore.

DEVELOPMENT NOTES

All globals begin with "tguy_em_" (for Thunderguy Evermore)
Tested with PHP 4.4.x, WordPress 1.5 and 2.
*/

if (!is_plugin_page()) :


// Add the "more" link immediately after reading the post from the database
add_filter('the_posts', 'tguy_em_addmoreall');
add_action('admin_menu', 'tguy_em_add_admin_pages');


function tguy_em_addmoreall($posts) {
/*    Add a "more" link immediately after reading posts from the database.
*/
    $count = count($posts);
    for ($i = 0; $i < $count; ++$i) {
        $posts[$i]->post_content = tguy_em_addmore($posts[$i]->post_content);
    }
    return $posts;
}

function tguy_em_addmore($post_content) {
/*    Add a "more" comment in an appropriate place, unless
    there is already a "<!--more-->" (we don't add an extra one) or
    a "<!--nevermore-->" (user has disabled evermore for this post).
*/
    // Only continue if content has no "more" and no "nevermore"
    if ((false === strpos($post_content, '<!--more-->'))
    &&  (false === strpos($post_content, '<!--nevermore-->'))) {
        $options = get_option('tguy_more_evermore');
        if (!$options) {
            $options = tguy_em_get_default_options();
        }
        $char_skip_count = intval($options['em_min_chars_to_skip']);
        $para_skip_count = intval($options['em_paras_to_skip']);
        $link_on_new_para = $options['em_link_on_new_para'];

        // Skip a number of initial characters
        $skipped_chars = substr($post_content, 0, $char_skip_count);
        $unskipped_chars = substr($post_content, $char_skip_count);

        // Use regex-fu to break the post into paragraphs. This scheme
        // may fail on pathological combinations of <br> and
        // newline chars. It can also fail on nested block-level tags
        // (e.g. nested divs). So don't do that!

        // Pattern matching an HTML tag that indicates a paragraph
        $para_tag = '(?:p|pre|blockquote|div|ol|ul|h[1-6]|table)';
        // Pattern matching two consecutive newlines with optional space between
        $double_newline = "(?:\r\n *\r\n|\r *\r|\n *\n|<br\s*/?>\s*<br\s*/?>)";
        // Pattern matching optional whitespace
        $ws = '\s*';
        // Pattern matching paragraph body (must start at the beginning
        // of a paragraph, and be followed by a paragraph end)
        $body = '.+?';
        // Pattern matching the end of a paragraph
        $end = "(?:$double_newline|</$para_tag>|(?<=\W)(?=$ws<$para_tag\W))";

        // Get all the skipped paragraphs, but separate the end of the final paragraph so
        // we can add a "run-on" more if necessary.
        // regex finds: a para body; followed by (n-1) end+body pairs; followed by an end; followed by something.
        $para_skip_dec = $para_skip_count - 1;
        if (preg_match("!^($ws$body(?:$end$ws$body){".$para_skip_dec."})($end)$ws\S!is", $unskipped_chars, $matches)) {
            $skipped_paras = $matches[1];
            $skipped_end = $matches[2];
            $unskipped_paras = substr($unskipped_chars, strlen($skipped_paras) + strlen($skipped_end));
            if ($link_on_new_para) {
                // Add 2 newlines after the more, to stop WP adding
                // a <br> after the more which leaves a spurious blank line.
                return $skipped_chars . $skipped_paras . $skipped_end . "<!--more-->\n\n" . $unskipped_paras;
            } else {
                return $skipped_chars . $skipped_paras . '<!--more-->' . $skipped_end . $unskipped_paras;
            }
        }
    }
    // No "more" was added. If the request includes the magic word, then add diagnostic info in a comment at the end of the post
    if ($_GET['evermore_diagnostics']) {
        return $post_content . "<!--\n" . htmlspecialchars(tguy_em_get_diagnostics($post_content, $options)) . "\n-->";
    }
    return $post_content;
}

function tguy_em_get_diagnostics(&$post_content, $options) {
    // Return a string with diagnostic info on the raw post data.
    $diagnostic_reason = "";

    $char_skip_count = intval($options['em_min_chars_to_skip']);
    $para_skip_count = intval($options['em_paras_to_skip']);
    $link_on_new_para = $options['em_link_on_new_para'];

    $diagnostic_extra_info = "";
    if (false !== strpos($post_content, '<!--more-->')) {
        $diagnostic_reason .= "Post contained (more)";
    }
    if (false !== strpos($post_content, '<!--nevermore-->')) {
        $diagnostic_reason .= "Post contained (nevermore)";
    }
    if (strlen($post_content) <= $char_skip_count) {
        $diagnostic_reason .= "Post was too short";
    }
    if ($diagnostic_reason == "") {
        // We must analyse the content to determine the reason
        $diagnostic_reason .= "Post did not contain end-of-paragraph";
        // Mark newlines, escape HTML
        $diagnostic_unskipped_chars = substr($post_content, $char_skip_count);
        $diagnostic_unskipped_chars = str_replace("\\", "\\\\", $diagnostic_unskipped_chars);
        $diagnostic_unskipped_chars = str_replace(
            array("\n", "\r"),
            array("\\n", "\\r"),
            $diagnostic_unskipped_chars);
        $diagnostic_extra_info = "Post content (unskipped)
[" . $diagnostic_unskipped_chars . "]
";
    }
    return "Evermore was not triggered. Diagnostics:
Skip chars [$char_skip_count]
Skip paragraphs [$para_skip_count]
New paragraph [".($link_on_new_para?'true':'false')."]
Post length [".strlen($post_content)."]
Reason [$diagnostic_reason]
".$diagnostic_extra_info;
}

function tguy_em_add_admin_pages() {
    add_options_page('Evermore', 'Evermore', 10, __FILE__, 'tguy_em_options_page');

    // Create option in options database if not there already:
    add_option('tguy_more_evermore', tguy_em_get_default_options(), 'Options for the Evermore plugin');
}

function tguy_em_get_default_options() {
    $options = array();
    $options['em_min_chars_to_skip'] = 100;
    $options['em_paras_to_skip'] = 1;
    $options['em_link_on_new_para'] = true;
    return $options;
}



endif; // if (!is_plugin_page())


function tguy_em_options_page() {
    // See if user has submitted form
    if ( isset($_POST['submitted']) ) {
        $options = array();
        $options['em_min_chars_to_skip'] = intval($_POST['em_min_chars_to_skip']);
        $options['em_paras_to_skip'] = intval($_POST['em_paras_to_skip']);
        $options['em_link_on_new_para'] = (bool)($_POST['em_link_on_new_para']);

        // Remember to put all the other options into the array or they'll get lost!
        update_option('tguy_more_evermore', $options);
        echo '<div id="message" class="updated fade"><p><strong>Plugin settings saved.</strong></p></div>';
    }
   
    // Draw the Options page for the plugin.
    $options = get_option('tguy_more_evermore');

    $action_url = $_SERVER[PHP_SELF] . '?page=' . basename(__FILE__);
?>
    <div class='wrap'>
        <h2>Evermore</h2>
        <p><cite>Evermore</cite> automatically displays a short preview of your posts on your blog home page.
        The preview also appears on the archive and category pages.
        For each post, the first few paragraphs are shown along with a "read more" link to read the full post.</p>
       
        <form name="evermore" action="<?php echo $action_url; ?>" method="post">
            <input type="hidden" name="submitted" value="1" />
               
            <fieldset class="options">
            <legend>Settings</legend>
                <ul>
                    <li>
                    <label for="em_paras_to_skip">
                        Create previews containing the first
                        <input type="text" id="em_paras_to_skip" name="em_paras_to_skip"
                            size="2" maxlength="3"
                            value="<?php echo $options['em_paras_to_skip']; ?>" />
                        paragraphs of each post
                    </label>
                    </li>
                    <li>
                    <label for="em_min_chars_to_skip">
                        Ensure the preview is at least
                        <input type="text" id="em_min_chars_to_skip" name="em_min_chars_to_skip"
                            size="4" maxlength="4"
                            value="<?php echo $options['em_min_chars_to_skip']; ?>" />
                        characters long
                    </label>
                    </li>
                    <li>
                    Add a "read more" link to the full post<br />
                    <label for="em_link_on_new_para">
                        <input type="checkbox" id="em_link_on_new_para" name="em_link_on_new_para" <?php echo ($options['em_link_on_new_para']==true?"checked=\"checked\"":"") ?> />
                        Show the "Read more" link on a line by itself
                    </label><br />
                        Note that the actual text appearing on the link depends on your WordPress theme.
                    </li>
                </ul>
                <script type="text/javascript">
                <!--
                function tguy_em_set_defaults() {
                    document.getElementById("em_paras_to_skip").value = 1;
                    document.getElementById("em_min_chars_to_skip").value = 100;
                    document.getElementById("em_link_on_new_para").checked = true;
                }
                document.write('<p><input type="button" name="Defaults" value="Use Defaults" onclick="tguy_em_set_defaults(); return false;" /></p>');
                //-->
                </script>
                <noscript>
                <p><strong>Defaults:</strong> Previews contain first 1 paragraph; count first 100 characters in first paragraph; show "Read more" on a line by itself.</p>
                </noscript>
            </fieldset>
            <p class="submit"><input type="submit" name="Submit" value="Save changes &raquo;" /></p>
        </form>
    </div>
<?php
}



?>

6

Re: Создание анонса (more и noteaser)

Раз уж пошли плагины, которые работают с more, кину ссылку на очень простой и умный плагин auto-more который автоматически вставляет тег more после первого абзаца— если тег more не вставлен вручную в произвольном месте поста. Очень удобно. Автор хорошо нам известный Ю.Б.

Едет вебмастер в поезде и слышит: <td></td> … <td></td> … <td></td>
шаблоны Темы

7 (06-11-2007 21:10:49 отредактировано Vassilyev)

Re: Создание анонса (more и noteaser)

Что-то не нахожу в коде этих плагинов фразы "Read more" - чтобы заменить на "Читать полностью" sad

8

Re: Создание анонса (more и noteaser)

sonika пишет:

auto-more который автоматически вставляет тег more после первого абзаца— если тег more не вставлен вручную в произвольном месте поста. Автор хорошо нам известный Ю.Б.

У меня вопрос по этому плагину к автору Ю.Б.
после подключения плагина при попытке войти в окно управления записями вышло сообщение с такой ошибкой:
Fatal error: Call to undefined function mb_strlen() in Z:\home\blog\www\wp-content\plugins\auto_more.php on line 43
Подскажите как мне действовать, чтоб плагин заработал.

9

Re: Создание анонса (more и noteaser)

Спрашивали - отвечаем. Либо использовать старую версию плагина, без mb, либо подключать в php расширение mb.
Справка: расширение mbsting представляет собой набор строковых функций, понимающих, что такое utf-8.

[signature]Есть ли смысл просить инструкцию по регулировке карбюратора, если не знаешь, в каком из багажников находится двигатель?[/signature]

10 (26-02-2008 13:48:20 отредактировано Viggo)

Re: Создание анонса (more и noteaser)

К сожалению, я совсем не знаю пхп. Вас не затруднит подробнее изложить очередность действий, чтоб подключить это расширение mb в php.
(сайт тестирую на локальном хосте, база данных и сам блог имеют одну кодировку utf8)

11

Re: Создание анонса (more и noteaser)

Затруднит, я не попугай по два раза отвечать на оффтоповые вопросы.

[signature]Есть ли смысл просить инструкцию по регулировке карбюратора, если не знаешь, в каком из багажников находится двигатель?[/signature]

12

Re: Создание анонса (more и noteaser)

тут такое дело... добавил во все посты

<!--more-->
<!--noteaser-->

и хочу чтобы при выдаче списка статей по условиям query_posts в цикле выводился контент до <!--more-->
<!--noteaser-->, а у меня выводится все именно после него... как будто я зашел в пост.

вызывается контент следующей функцией:

  <?php the_content("Continue reading " . the_title('', '', false), true); ?>

подскажите что может быть не так?

13

Re: Создание анонса (more и noteaser)

Забавно. smile А что у Вас в query_posts? $query_string. есть?

[signature]Есть ли смысл просить инструкцию по регулировке карбюратора, если не знаешь, в каком из багажников находится двигатель?[/signature]

14 (05-04-2008 09:57:40 отредактировано curtdp)

Re: Создание анонса (more и noteaser)

<?php query_posts('cat=6,-11,-1'); ?>

у меня пост принадлежит двум категориям, это сайт про телефоны все такое, указывается модель телефона и тип поста (обзор, новость, каталог)
Здесь я вывожу посты про alcatel например, и не вывожу новости и обзоры, тем самым оставляю для вывода посты каталога моделей.

15

Re: Создание анонса (more и noteaser)

Не знаю, ну попробуйте

<?php query_posts($query_string.'&cat=6,-11,-1'); ?>

Хуже не будет. smile

[signature]Есть ли смысл просить инструкцию по регулировке карбюратора, если не знаешь, в каком из багажников находится двигатель?[/signature]

16 (05-04-2008 10:19:13 отредактировано curtdp)

Re: Создание анонса (more и noteaser)

Ю.Б. пишет:

Не знаю, ну попробуйте

<?php query_posts($query_string.'&cat=6,-11,-1'); ?>

Хуже не будет. smile

Таким образом посты вообще не вышли... просто заголовок страницы и все...

вот мой код целиком... может кто увидит где здесь ошибка...

<?php query_posts('cat=6,-11,-1'); ?>
<?php if (have_posts()) : ?>
<?php $first = true; ?>
<?php while (have_posts()) : the_post(); ?>
  <div class="post <?php if($first == true) echo "first" ?>" id="post-<?php the_ID(); ?>">
  <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Постоянная ссылка <?php the_title(); ?>"><?php the_title(); ?></a></h2>
  <small><?php the_time('F j, Y') ?> <!-- by <?php the_author() ?> --></small>
  <div class="entry">
  <?php the_content("Continue reading " . the_title('', '', false), true); ?>
  </div>
  <p class="postmetadata"><?php the_category(', ') ?> | <?php edit_post_link('Редактировать', '', ' | '); ?>
  <?php comments_popup_link('Нет комментариев »', 'Один комментарий »', 'Комментариев: %'); ?></p>
  </div>
<?php $first = !$first; if ($first) echo '<br clear=all>'; ?>
<?php endwhile; ?>

таким образом код работает, выводит нужные мне посты, контент после <!--noteaser--> <!--more-->, а мне надо именно до, анонсы статей...

17

Re: Создание анонса (more и noteaser)

<?php the_content("Continue reading " . the_title('', '', false)); ?>

[signature]Есть ли смысл просить инструкцию по регулировке карбюратора, если не знаешь, в каком из багажников находится двигатель?[/signature]

18

Re: Создание анонса (more и noteaser)

Ю.Б. пишет:

<?php the_content("Continue reading " . the_title('', '', false)); ?>

Вот что я вычитал в кодексе

The <!--more--> quicktag will not operate and is ignored if there is only one post being displayed.

А добиться эффекта я хотел именно с внутренней страницы... типа одним постом соответственно...
кто-нибудь... подскажите такой вариант... чтобы на внутренней странице я вывел все посты по заданному параметру в querry_posts, именно до  <!--noteaser--> <!--more-->.

19

Re: Создание анонса (more и noteaser)

Тоже столкнулся с данной проблемой :-( помогите

20 (05-11-2009 15:41:55 отредактировано alexgor76)

Re: Создание анонса (more и noteaser)

Вот нашел информацию - по автоматизации тега   more без плагина, путем коректировки в теме файла index.php

4. Идём: внешний вид – редактор тем – основной шаблон(index)
И меняем код <?php the_content() ?>
на <?php the_excerpt() ?>
<a href="<?php the_permalink(); ?>">Читать далее</a>

Это позволит нам каждый раз не ставить тег more.
Это всё делается, чтобы не терять драгоценное время.  - Про это пишут на http://blogweb.ru/recept-satellita-kotoryj-budet-garantirovanno-prinosit-po-1-dollaru-v-sutki-ot-sanchezboy/#more-16

Поменял эту команду. Появилось нужное "Читать далее" внизу поста, но досада - увидеть пост целиком не получаеться. При заходе в пост видим его первую часть и надпись "Читать далее", а остальная часть поста не открываеться.

Подскажите, что не так в настройках или что-то еще недоустановлено - недописано или ресурс где можно прочесть нужную информацию. Использую WP версии 2.7.0 Автор же этой интсрукции использует WP 2.3.3 Что-то не вериться что подобная проблема может быть связана с версией WP

21

Re: Создание анонса (more и noteaser)

Вернуть the_content() в файле single.php и «держать в уме», что the_excerpt() вызывает большую нагрузку на хостинг (своеобразная плата за лень).

22

Re: Создание анонса (more и noteaser)

Help Desk, да я б и рад послушать вашего совета, но тема не содержит файла single.php так что в этом файле я изменить что либо не мог никак...  hmm

Менял я в index.php, если вы не дочитались...

23

Re: Создание анонса (more и noteaser)

alexgor76 пишет:

Help Desk, да я б и рад послушать вашего совета, но тема не содержит файла single.php так что в этом файле я изменить что либо не мог никак...  hmm

Чтож - в таком случае, ответ на Вашу просьбу в последнем абзаце, Вы найдете в Кодексе. В частности в разделе про иерархию шаблонов.

24

Re: Создание анонса (more и noteaser)

Help Desk, а ссылочку жалко дать ?

25

Re: Создание анонса (more и noteaser)

http://codex.wordpress.org

Специалист - это человек умело обходящий все мелкие ошибки на пути к грандиозному провалу =)