[Помогите] Вывод анонса поста с определенного символа( строки, тега)

Тема в разделе "Wordpress", создана пользователем axper, 2 сен 2014.

Модераторы: Sorcus
  1. axper

    axper Создатель

    Регистр.:
    14 авг 2014
    Сообщения:
    22
    Симпатии:
    6
    Всем ку-ку. Столкнулся с проблемой - нужно вывести анонс поста с определенного момента(вывести только описание, а то, что до него не выводить). Т.е. допустим есть пост - в нем, допустим, 100 символов до начала описание проекта, которому посвящен сам пост. Так вот нужно в анонсе вывести краткое описание начиная со 101 символа. Как я полагаю, нужно ту часть которая не будет выводиться в анонсе обернуть в какой нибудь тег, возможно даже с классом. Но смысл в том, что в анонсе текст выводится без учета html тегов, так что тут тоже тупик. Можно учитывать html теги в анонсе, но в выводе получится форматированная с помощью html белиберда.
    Подскажите пожалуйста, как можно решить эту проблему, мучаюсь уже 3 дня.
    Вот сам код: сейчас выводятся посты из рубрики с id=5.
    Код:
    <div class="projects-block col-1-1">
         <?php query_posts('cat=5');?>
                <?php if (have_posts()) : ?>
                        <?php while (have_posts()) : the_post(); ?>
                            <div class="single-project col-98-98">
                                <div class="title-single-project"> <a href="<?php the_permalink() ?>"><?php the_title(); ?></a></div>
                                <div class="thumb-single-project col-1-4"><?php if ( has_post_thumbnail()): ?><?php the_post_thumbnail();  ?><?php endif;?> </div>
                                <div class="description-single-project col-9-12"><?php kama_excerpt("maxchar=380"); ?></div>
                        <a href="<?php the_permalink() ?>" class="button-single-project">Подробнее о проекте</a>
                           </div>
                    <?php endwhile; ?>
                <?php else : ?>
                        <div <?php post_class(); ?> id="post-0">
                               <h1>Ничего не найдено</h1>
                        </div>
         <?php endif; ?>
    <?php wp_reset_query(); ?>
    </div>
    
    Вот скриншоты. Анонс и полная новость. Видно что в анонсе выводится лишняя информация, от которой как раз таки и нужно избавится, т.е. выводить только после слова "Описание"
    1.jpg 2.jpg
     
  2. Teceract

    Teceract

    Регистр.:
    15 фев 2009
    Сообщения:
    154
    Симпатии:
    71
    У Вас идет код:
    PHP:
    kama_excerpt("maxchar=380")
    означает, что количество символов в описании будет 380, можете изменить на 100.
    Можно убрать данный код и поставить: the_exerpt(); и использовать специальный тег в редакторе: Вставить тег "Далее".
    Можно создать произвольное поле, например shortdesc и вставить его для анонса, заполняете в каждой записи это поле и оно будет выводиться так, как Вам нужно.
    Можно создать функцию, которая добавит дополнительный textarea после основного редактора
    Вариантов много.
     
  3. axper

    axper Создатель

    Регистр.:
    14 авг 2014
    Сообщения:
    22
    Симпатии:
    6
    Я прекрасно знаю, что означает эта функция, и так же прекрасно знаю функцию the_exerpt(), вместо нее как раз таки я и использую kama_excerpt("maxchar=380") для того, чтобы выводилось определенное количество символов, а именно 380. Да, можно вставить тэг "Далее", но при его использовании выводится все, что следует ДО этого тега,а то что после по дефолту заменяется на "More..." Если посмотреть на скриншоты, то этот вариант не подходит. Если только поправить функцию и выводить только то, что находится ПОСЛЕ тега --more--. А вот как сделать это я к сожалению не знаю...
    А вот тут вот можно поподробнее?Это уже интереснее... Да допустим я добавляю дополнительный textarea после редактора, но как я его вызываю в посте? Либо, как вариант, в доп. textarea дублирую описание и уже это "второе" описание вывожу в анонсе? И разница между textarea и произвольным полем?Это не одно и то же?)
     
  4. Teceract

    Teceract

    Регистр.:
    15 фев 2009
    Сообщения:
    154
    Симпатии:
    71
    [​IMG]
    Вывод
    PHP:
    <?php echo get_post_meta(get_the_ID(), 'newmetaname'true); ?>
    ------или

    мета блок после редактора

    функция
    PHP:
    // Подключение мета-блок в админку
    add_action('admin_init', 'newmetaname_field', 1);
    function newmetaname_field() {
    add_meta_box('newmetaname_field_box', 'Блок описания', 'newmetaname_field_func', 'post', 'normal', 'low');
    add_meta_box('newmetaname_field_box', 'Текст', 'extra_fields_box_page_func', 'page', 'normal', 'high');
    }
    // HTML-код
    function newmetaname_field_func( $post ){
    ?>
    <p>
    &nbsp;<em>Описание:</em>
    <textarea type="text" name="extra[newmetaname]" style="width: 100%; height: 50px;"><?php echo get_post_meta($post->ID'newmetaname'1); ?></textarea>
    </p>
    <input type="hidden" name="extra_fields_nonce" value="<?php echo wp_create_nonce(__FILE__); ?>" />
    <?php
    }
    add_action('save_post''my_extra_fields_update'0);

    /* необходимо для сохранения данных с формы при сохранении поста */
    function my_extra_fields_update$post_id ){
        if ( !
    wp_verify_nonce($_POST['extra_fields_nonce'], __FILE__) ) return false// проверка
        
    if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return false// если это автосохранение
        
    if ( !current_user_can('edit_post'$post_id) ) return false// если юзер не имеет право редактировать запись

        
    if( !isset($_POST['extra']) ) return false

        
    $_POST['extra'] = array_map('trim'$_POST['extra']);
        foreach( 
    $_POST['extra'] as $key=>$value ){
            if( empty(
    $value) )
                
    delete_post_meta($post_id$key); // удаляем поле если значение пустое

            
    update_post_meta($post_id$key$value); // add_post_meta() работает автоматически
        
    }
        return 
    $post_id;
    }
    вывод
    PHP:
    <?php echo get_post_meta($post->ID"newmetaname"true); ?>
     
    axper нравится это.
  5. axper

    axper Создатель

    Регистр.:
    14 авг 2014
    Сообщения:
    22
    Симпатии:
    6
    Огромное спасибо! То есть все таки в любом случае дублирование текста будет?
     
  6. Teceract

    Teceract

    Регистр.:
    15 фев 2009
    Сообщения:
    154
    Симпатии:
    71
    В моем примере в meta произвольного поля "newmetaname" заполняете это поля для анонса(+ код вывода на странице для отображения).
    А чтобы эти данные отображались еще в полной новости нужно добавить: либо снова код вывода произвольного поля "newmetaname" перед the_content();(или как там выводится полная новость с редактора) или же добавить в сам редактор эти данные. Сами данные не продублируются в полную новость.

    Немного не понял про дублирование, описал как мог)
     
  7. axper

    axper Создатель

    Регистр.:
    14 авг 2014
    Сообщения:
    22
    Симпатии:
    6
    Про дублирование не правильно понял) Это понятно что в полную новость не будет дублироваться)Я про то, что нужно И в полную новость вставлять контент, И в отдельное поле(то, что нужно выводить в анонсе) :)