我们在 Wordpress 中有一个函数,可以在帖子中的 3 段之后显示一个代码块:
add_filter('the_content', 'wpse_ad_content');
function wpse_ad_content($content)
{
if (!is_single()) return $content;
$paragraphAfter = 3; //Enter number of paragraphs to display ad after.
$content = explode("</p>", $content);
$new_content = '';
for ($i = 0; $i < count($content); $i++) {
if ($i == $paragraphAfter) {
$new_content.= '<div style="col-xs-12">';
$new_content.= 'code here';
$new_content.= '</div>';
}
$new_content.= $content[$i] . "</p>";
}
return $new_content;
}
我们正在尝试完成此功能,以便在包含和显示至少 8 张图像的帖子中显示另一个代码块(每个图像理解
<img src=...
)。
此块应显示在图像编号 8 之后,如果它们不是 8 张图像,则附加功能不会显示任何内容。
----- 编辑 1:尝试使用@TimTroiano解决方案后
add_filter('the_content', 'wpse_ad_content');
function wpse_ad_content($content)
{
if (!is_single()) return $content;
$paragraphAfter = 3; //Enter number of paragraphs to display ad after.
$imagesAfter = 7; //Enter number of images to display code snippet after.
$content = explode("</p>", $content);
$new_content = '';
for ($i = 0; $i < count($content); $i++) {
if ($i == $paragraphAfter) {
$new_content.= '<div class="col-lg-12" style="text-align: center; padding-top: 10px; margin-bottom: 20px;">';
$new_content.= '<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- La nube sobre título -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client=""
data-ad-slot="7588478595"
data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>';
$new_content.= '</div>';
}
$new_content.= $content[$i] . "</p>";
if ($imagesAfter > 0) {
$imagesAfter -= 1;
} else {
$new_content.= '<div class="col-lg-12" style="text-align: center; padding-top: 10px; margin-bottom: 20px;">';
$new_content.= '<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- La_Nube_4_Anuncio -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client=""
data-ad-slot="3663644595"
data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>';
$new_content.= '</div>';
$imagesAfter = 7; //Reset number of images to display code after.
}
}
return $new_content;
}
我们注意到一个奇怪的行为。1.将文本段落视为图片。2.此外,如果更多的图像或段落(8的倍数),则重复代码块,并且应该只出现一次。
感谢您发布相关代码。我添加了一个变量$imagesAfter它将在添加代码片段之前计算已插入的图像数量。当$imagesAfter达到 0 时,它会插入您选择插入的任何内容,并将$imagesAfter重置回原始数字。
我添加的内容:
$imagesAfter = 7; //Enter number of images to display code snippet after.
if ($imagesAfter > 0) {
$imagesAfter -= 1;
} else {
**Code snippet after set number of images goes here**
$imagesAfter = 7; //Reset number of images to display code after.
}
以下是我在适当位置添加的部分的完整代码:
function wpse_ad_content($content)
{
if (!is_single()) return $content;
$paragraphAfter = 3; //Enter number of paragraphs to display ad after.
$imagesAfter = 7; //Enter number of images to display code snippet after.
$content = explode("</p>", $content);
$new_content = '';
for ($i = 0; $i < count($content); $i++) {
if ($i == $paragraphAfter) {
$new_content.= '<div style="col-xs-12">';
$new_content.= 'code here';
$new_content.= '</div>';
}
$new_content.= $content[$i] . "</p>";
if ($imagesAfter > 0) {
$imagesAfter -= 1;
} else {
**Code snippet after set number of images goes here**
$imagesAfter = 7; //Reset number of images to display code after.
}
}
return $new_content;
}
这是一个更简单的解决方案。使用模运算符测试 $i 是否是 8 的倍数,然后显示图像。
$if ($i > 0) {
if ($i % 8 == 0) {
**Code snippet after set number of images goes here**
}
}
这将在您的代码中出现:
function wpse_ad_content($content)
{
if (!is_single()) return $content;
$paragraphAfter = 3; //Enter number of paragraphs to display ad after.
$content = explode("</p>", $content);
$new_content = '';
for ($i = 0; $i < count($content); $i++) {
if ($i == $paragraphAfter) {
$new_content.= '<div style="col-xs-12">';
$new_content.= 'code here';
$new_content.= '</div>';
}
$if ($i > 0) {
if ($i % 8 == 0) {
**Code snippet after set number of images goes here**
}
}
$new_content.= $content[$i] . "</p>";
}
return $new_content;
}
让我知道这是否解决了您的问题,或者您是否正在寻找不同的东西。