Поддержка Проблемы и решения Информация в середине поста

  • День добрый уважаемые гуру WordPress!
    У меня появилась необходимость автоматически вставить информацию в середине поста, на данный момент похожая статья, в будущем может быть и реклама. По этому решил создать область виджета в данном участке. Первым делом создал область в файле widget-functions.php, (который создал сам и подключил к файле functions через include) область виджета таким образом :

    // область в постах
    if (function_exists('register_sidebar')){
       register_sidebar( array(
            'name'          => 'Область в постах', //название виджета в админ-панели
            'id'            => 'wsidebar-3', //идентификатор виджета
            'description'   => 'контент для постов', //описание виджета в админ-панели
            'before_widget' => '<div id="%1$s" class="widget %2$s">', //открывающий тег виджета с динамичным идентификатором
            'after_widget'  => '<div class="clear"></div></div>', //закрывающий тег виджета с очищающим блоком
            'before_title'  => '<span class="widget-title">', //открывающий тег заголовка виджета
            'after_title'   => '</span>',//закрывающий тег заголовка виджета
            ) );
    }

    То есть фактически в файле functions. Но так, как одним созданием области недостаточно, нужно его вызвать <?php dynamic_sidebar( 'wsidebar-3' ); ?>в нужном месте, а в моем случае в середине поста, то появилась проблема, ведь ` <?php
    the_content(); ` нельзя же делить пополам, если же вызывать функцию после, то виджет появляется после статьи, если перед, то соответственно, по этому мне пришлось зарегистрировать ещё одну функцию, позволяющего вставить информацию в середине поста :

    /*Как вставить информацию в середину статьи*/
    function wpse_ad_content( $content ) {
        if( !is_single() )
        return $content;
        $paragraphAfter = 3; // Номер абзаца, после которого нужно вставить данные
    
        $content = explode ( "</p>", $content );
        for ( $i = 0; $i < count ($content)-1; $i ++ ) {
            if ( $i == $paragraphAfter ) {
              ?>
    <?php echo do_shortcode('<div class="rel_psts">[related_posts] 
    </div>'); ?>
    <?php dynamic_sidebar( 'wsidebar-3' ); ?>
    
        <?php
        }
        echo $content[ $i ] . "</p>";
        }
    }
    add_filter( 'the_content', 'wpse_ad_content' );

    Где <?php dynamic_sidebar( 'wsidebar-3' ); ?> вызов виджета а `<?php echo do_shortcode(‘<div class=»rel_psts»>[related_posts]
    </div>’); ?>` вызов шорткода похожих записей в середине поста.
    А сама функция шорткода похожих записей :

    /* схожие записи шорткод для середины статьи */
    /* ------------------------------------- */
    function related_posts_shortcode( $atts ) {
    extract(shortcode_atts(array(
    'limit' => '1',
    ), $atts));
     
    global $wpdb, $post, $table_prefix;
     
    if ($post->ID) {
    $retval = '<ul><H3>ТАКЖЕ ЧИТАЮТ</H3><ul>';
    // Get tags
    $tags = wp_get_post_tags($post->ID);
    $tagsarray = array();
    foreach ($tags as $tag) {
    $tagsarray[] = $tag->term_id;
    }
    $tagslist = implode(',', $tagsarray);
     
    // Do the query
    $q = "SELECT p.*, count(tr.object_id) as count
    FROM $wpdb->term_taxonomy AS tt, $wpdb->term_relationships AS tr, $wpdb->posts AS p WHERE tt.taxonomy ='post_tag' AND tt.term_taxonomy_id = tr.term_taxonomy_id AND tr.object_id = p.ID AND tt.term_id IN ($tagslist) AND p.ID != $post->ID
    AND p.post_status = 'publish'
    AND p.post_date_gmt < NOW()
    GROUP BY tr.object_id
    ORDER BY count DESC, p.post_date_gmt DESC
    LIMIT $limit;";
     
    $related = $wpdb->get_results($q);
    if ( $related ) {
    foreach($related as $r) {
    $retval .= '<li><a title="'.wptexturize($r->post_title).'" href="'.get_permalink($r->ID).'">'.wptexturize($r->post_title).'</a></li>';
    }
    } else {
    $retval .= '
    <li>МЕСТО ВАШЕЙ РЕКЛАМЫ </li>';
    }
    $retval .= '<ul></ul>';
    return $retval;
    }
    return;
    }
    add_shortcode('related_posts', 'related_posts_shortcode');
    

    Конечно, соответственно и задал стили, но здесь не об этом, а мой вопрос в следующем :

    Как «заставить» функцию похожих записей выводить не только заголовок, а ещё и изображение записи?

    Страница, с которой нужна помощь: [войдите, чтобы увидеть ссылку]

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Модератор Yuri

    (@yube)

    Автор rianovost

    (@suryano11)

    А где именно вставить функцию по вашей ссылке? Где бы не вставил выводит ошибку сайта. Может быть нужно «завернуть через какие-то теги в самой функции вывода похожих записей?

    Автор rianovost

    (@suryano11)

    Вообщем нужно вставить следующее выражение в функцию вывода похожих записей :

    <?php if ( has_post_thumbnail() ) { the_post_thumbnail('thumbnail'); }
    else { ?>
    <img src="<?php echo first_post_image() ?>" alt="<?php the_title(); ?>" />

    Данное выражение позволяет вывести первую картинку, если не задано изображение.
    Но вывод ошибки

    PHP Parse error: syntax error, unexpected ‘thumbnail’ (T_STRING) in

    Что то тут делаю топорно

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Тема «Информация в середине поста» закрыта для новых ответов.