如何在Wordpress中的X图像后的帖子中注入代码

时间:2016-02-05 15:01:53

标签: php html wordpress

我们在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的倍数)并且只出现一次,则重复代码块。

1 个答案:

答案 0 :(得分:0)

感谢您发布相关代码。我添加了一个变量$ 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;
}

如果这可以解决您的问题,或者您正在寻找不同的东西,请告诉我。