私はそれを感じることができるのでとても親密です。 2段落後に広告ブロックを表示させようとしています。現在、最後の段落の前に広告ブロックを配置するために、functions.phpで次のコードを使用しています。
私は一生の間これを成し遂げるために正しいコードを見つけることができません。
function ads_added_above_last_p($text) {
if( is_single() ) :
$ads_text = '<div class="wpselect_middle_content">My Ad Code Here</div>';
if($pos1 = strrpos($text, '<p>')){
$text1 = substr($text, 0, $pos1);
$text2 = substr($text, $pos1);
$text = $text1 . $ads_text . $text2;
}
endif;
return $text;
}
add_filter('the_content', 'ads_added_above_last_p');
2番目の$ text文字列を再生して$ pos2を入力すると、完全に機能しますが、投稿内のすべてのテキストが複製されます。
任意の助けは大歓迎です。
私はexplode()
が文字列を分解しようとするときに便利であることがわかりました。このコードは、段落の塊の配列を作成し、2つの段落の後に新しいブロックを挿入し、それを連結して出力用の文字列に戻します。
function insert_ad_block( $text ) {
if ( is_single() ) :
$ads_text = '<div class="wpselect_middle_content">My Ad Code Here</div>';
$split_by = "\n";
$insert_after = 2; //number of paragraphs
// make array of paragraphs
$paragraphs = explode( $split_by, $text);
// if array elements are less than $insert_after set the insert point at the end
$len = count( $paragraphs );
if ( $len < $insert_after ) $insert_after = $len;
// insert $ads_text into the array at the specified point
array_splice( $paragraphs, $insert_after, 0, $ads_text );
// loop through array and build string for output
foreach( $paragraphs as $paragraph ) {
$new_text .= $paragraph;
}
return $new_text;
endif;
return $text;
}
add_filter('the_content', 'insert_ad_block');