Информация в середине поста
-
День добрый уважаемые гуру 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');
Конечно, соответственно и задал стили, но здесь не об этом, а мой вопрос в следующем :
Как «заставить» функцию похожих записей выводить не только заголовок, а ещё и изображение записи?
Страница, с которой нужна помощь: [войдите, чтобы увидеть ссылку]
- Тема «Информация в середине поста» закрыта для новых ответов.