我有这个(折磨的)剧本:
/*----------------------------- 3 ---------------------------*/
$paragraphAfter3 = 3;
*------------------------ WIDGET 3 ----------------------------*/
//Widget Area
add_action( 'widgets_init', 'register_my_widgets_google-ads-3' );
function register_my_widgets_main_google_ads_3(){
register_sidebar( array(
/* 'name' => sprintf(__('Sidebar %d'), $i ), */
'name' => 'My code 3',
/* 'id' => "sidebar-$i", */
'id' => 'google-ads-3',
'description' => '',
'class' => '',
'before_widget' => '<div id="%1$s" class="widget %2$s">',
'after_widget' => "</div>\n",
'before_title' => '<h2 class="google-ads-3 widgettitle">',
'after_title' => "</h2>\n",
) );
}
add_action( 'widgets_init', 'register_my_widgets_main_google_ads_3' );
/* function GoogleADS1(){
if ( function_exists('register_my_widgets_google-ads-1') )
dynamic_sidebar(google-ads-1);
}; */
add_filter( 'the_content', 'wpse_content_google_ads_3' );
function wpse_content_google_ads_3( $content ) {
if( !is_single() )
return $content;
/*Number paragraf*/
/* $paragraphAfter = 3; //number of paragraph */
global $paragraphAfter3;
$paragraphAfter = $paragraphAfter3; //number of paragraph
$content = explode ( "</p>", $content );
$new_content = '';
for ( $a = 0;
$a < count ( $content );
$a ++ ) {
if ( $a == $paragraphAfter ) {
ob_start();
if ( is_active_sidebar( 'google-ads-3' ) ) :
dynamic_sidebar( 'google-ads-3' );
else :
echo '<span></span>';
endif;
$result = ob_get_clean();
$new_content .= $result ;
}
elseif ($a != $paragraphAfter) {
$new_content .= '';
}
$new_content .= $content[$a] . "</p>";
}
return $new_content;
}
此脚本通过一定数量的段落插入窗口小部件的内容,效果很好。但如果页面上的段落较少。然后他将Widgets的内容粘贴到页脚中。 如果帖子中的段落少于其中所示的段落,如何实现它不会显示小部件?
答案 0 :(得分:0)
由于你使用$content = explode ( "</p>", $content );
爆炸内容,循环的最后一部分不会有
标记,所以你也可以循环直到第二个最后一个值,就像这样:
for ( $a = 0; $a < count ( $content )-1; $a ++ ) //**Notice - 1 here**
{
...
...
}
BUt my huncha是你的代码弄乱了DOM,这就是为什么小部件的结果正在向页脚移动。一旦我看到这种情况发生的情况就是$paragraphAfter = 0
。在这种情况下,小部件的结果会添加之前 content
的第一部分,这可能会破坏DOM,并使这个小部件显示在页脚中。