• DONATE to NULLED!
    Вы можете помочь Форуму и команде, поддержать финансово.
    starwanderer - модератор этого раздела будет Вам благодарен!

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

axper

Создатель
Регистрация
14 Авг 2014
Сообщения
21
Реакции
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
 
У Вас идет код:
PHP:
kama_excerpt("maxchar=380")
означает, что количество символов в описании будет 380, можете изменить на 100.
Можно убрать данный код и поставить: the_exerpt(); и использовать специальный тег в редакторе: Вставить тег "Далее".
Можно создать произвольное поле, например shortdesc и вставить его для анонса, заполняете в каждой записи это поле и оно будет выводиться так, как Вам нужно.
Можно создать функцию, которая добавит дополнительный textarea после основного редактора
Вариантов много.
 
У Вас идет код:
PHP:
kama_excerpt("maxchar=380")
означает, что количество символов в описании будет 380, можете изменить на 100.
Можно убрать данный код и поставить: the_exerpt(); и использовать специальный тег в редакторе: Вставить тег "Далее".
Я прекрасно знаю, что означает эта функция, и так же прекрасно знаю функцию the_exerpt(), вместо нее как раз таки я и использую kama_excerpt("maxchar=380") для того, чтобы выводилось определенное количество символов, а именно 380. Да, можно вставить тэг "Далее", но при его использовании выводится все, что следует ДО этого тега,а то что после по дефолту заменяется на "More..." Если посмотреть на скриншоты, то этот вариант не подходит. Если только поправить функцию и выводить только то, что находится ПОСЛЕ тега --more--. А вот как сделать это я к сожалению не знаю...
Можно создать произвольное поле, например shortdesc и вставить его для анонса, заполняете в каждой записи это поле и оно будет выводиться так, как Вам нужно.
Можно создать функцию, которая добавит дополнительный textarea после основного редактора
Вариантов много.
А вот тут вот можно поподробнее?Это уже интереснее... Да допустим я добавляю дополнительный textarea после редактора, но как я его вызываю в посте? Либо, как вариант, в доп. textarea дублирую описание и уже это "второе" описание вывожу в анонсе? И разница между textarea и произвольным полем?Это не одно и то же?)
 
gFCAz.jpg

Вывод
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); ?>
 
gFCAz.jpg

Вывод
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); ?>
Огромное спасибо! То есть все таки в любом случае дублирование текста будет?
 
Огромное спасибо! То есть все таки в любом случае дублирование текста будет?
В моем примере в meta произвольного поля "newmetaname" заполняете это поля для анонса(+ код вывода на странице для отображения).
А чтобы эти данные отображались еще в полной новости нужно добавить: либо снова код вывода произвольного поля "newmetaname" перед the_content();(или как там выводится полная новость с редактора) или же добавить в сам редактор эти данные. Сами данные не продублируются в полную новость.

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

Немного не понял про дублирование, описал как мог)
Про дублирование не правильно понял) Это понятно что в полную новость не будет дублироваться)Я про то, что нужно И в полную новость вставлять контент, И в отдельное поле(то, что нужно выводить в анонсе) :)
 
Назад
Сверху