在评论之间添加广告代码

时间:2019-02-08 作者:batuhan

我正在我的页面上显示评论。我想在每2条评论后显示1条广告。

<div class="panel-ads clearfix"></div> 它重复了评论的数量。

我想在每2条评论后添加广告代码。

例如:

<div class="panel-ads clearfix"></div>
<div class="panel-ads clearfix"></div>

/*
 * My ads code
 */

<div class="panel-ads clearfix"></div>
<div class="panel-ads clearfix"></div>

/*
 * My ads code
 */

My wp_list_comment() function: (function.php)

<?php
function new_comment($comment, $args, $depth,$i=0) { 
    $GLOBALS[\'comment\'] = $comment;
    $PostAuthor = false; 

    if($comment->comment_author_email == get_the_author_email()){
        $PostAuthor = true;
    }elseif($comment->comment_author_email == \'[email protected]\'){
        $PostAuthor = true;
    } 
?>

<div class="panel panel-default entry" id="comment-<?php echo $comment->comment_ID; ?>">
    <div class="panel-body">
        <div itemprop="text">  </div>
    </div>
    <div class="panel-footer clearfix">
       <?php comment_text(); ?>
    </div>
</div>

<?php 
}

2 个回复
最合适的回答,由SO网友:birgire 整理而成

Theend-callback 属于wp_list_comments()

一种方法是使用end-callback 中的参数:

wp_list_comments( [ 
    \'end-callback\' => \'wpse_comments_ads_injection\',
    ... other arguments ...
], $comments );
除了你的另一半wp_list_comments 参数,通过定义:

function wpse_comments_ads_injection( $comment, $args, $depth ) {
     static $instance = 0;
     $tag             = ( \'div\' == $args[\'style\'] ) ? \'div\' : \'li\';

     echo "</{$tag}><!-- #comment-## -->\\n";

     if ( 0 === $instance % 2 ) {
         echo "<{$tag} class=\\"comment__ad\\">YOUR AD HERE!</{$tag}>";
     }

     $instance++;
}
我们用静态变量进行计数$instance 每次通话都会递增。

这应该插入定义的评论广告,使用divli 标记,具体取决于样式。

通过使用结束回调,我们不需要修改注释回调,如果不需要,只需插入广告即可。因此,如果我们需要默认的注释布局,我们也可以通过这种方式插入广告。

还可以使用注释depth 控制广告显示。

请注意callbackend-callback 属于wp_list_comments(), 有三个输入参数,而不是四个。

Thewp_list_comments_args 然后,我们可以进一步调整过滤器并使用wp_list_comments_args 过滤器:

add_filter( \'wp_list_comments_args\', function( $args ) {
    if ( ! isset( $args[\'end-callback\'] ) ) {
        $args[\'end-callback\'] = \'wpse_comments_ads_injection\';
    }
    return $args;
} );
而不是修改wp_list_comments() 直接地

我们可以为此创建插件或将其添加到functions.php 当前主题目录中的文件。

引入注入的偏移量、速率和html,然后我们可以添加对注入的速率、偏移量和html的支持:

add_filter( \'wp_list_comments_args\', function( $args ) {
    if ( ! isset( $args[\'end-callback\'] ) ) {
        // Modify this to your needs!
        $args[\'end-callback\'] = \'wpse_comments_ads_injection\';
        $args[\'_ads_offset\']  = 0;  // Start injecting after the 1st comment.
        $args[\'_ads_rate\']    = 2;  // Inject after every second comment.
        $args[\'_ads_html\']    = \'<img src="http://placekitten.com/g/500/100" />\';
    }
    return $args;
} );
其中,我们通过以下方式调整结束回调:

/**
 * Inject Ads To WordPress Comments - end-callback for wp_list_comments().
 *
 * The Ads HTML is sanitized through wp_kses_post().
 *
 * @version 1.0.11
 * @see https://wordpress.stackexchange.com/a/328155/26350
 */
function wpse_comments_ads_injection( $comment, $args, $depth ) {
    static $instance = 0;
    $tag             = ( \'div\' == $args[\'style\'] ) ? \'div\' : \'li\';
    $ads_rate        = isset( $args[\'_ads_rate\' ] ) && $args[\'_ads_rate\' ] > 0 
        ? (int) $args[\'_ads_rate\' ] 
        : 2;
    $ads_offset      = isset( $args[\'_ads_offset\' ] ) && $args[\'_ads_offset\' ] > 0
            ? (int) $args[\'_ads_offset\' ]
        : 0;
    $ads_html        = isset( $args[\'_ads_html\' ] ) 
        ? wp_kses_post( $args[\'_ads_html\' ] )
        : \'\';

    echo "</{$tag}><!-- #comment-## -->\\n";

    if ( $ads_offset <= $instance && 0 === ( $instance - $ads_offset ) % $ads_rate && ! empty( $ads_html ) ) {
        echo "<{$tag} class=\\"comment__ad\\">{$ads_html}</{$tag}>";
    }

    $instance++;
}
这里有一个gist 用于将代码添加到functions.php 当前主题目录中的文件。

这是未经测试的,但我希望您可以根据需要进行调整!

SO网友:phatskat

试试看,如果你有任何问题,请告诉我。

<?php
function sinyor_comment($comment, $args, $depth,$i=0) { 
    /**
     * This follows @birgire\'s answer, hat-tip for use of `static`.
     *
     * The `static` keyword declares `$count` as static to the
     * `sinyor_comment` method. That means that it will persist
     * within the function\'s scope on each run of `sinyor_comment`.
     *
     * Essentially: $count will always be what you set it to the
     * last time you called `sinyor_comment`, which you can use
     * to tell which comment you\'re on.
     */
    static $count = 0; // This assignment only happens the first time.

    // Not sure what you\'re using this for, but I would recommend
    // finding a better way to pass this around if you need
    // it elsewhere.
    $GLOBALS[\'comment\'] = $comment;

    $PostAuthor = false; 

    if($comment->comment_author_email == get_the_author_email()){
        $PostAuthor = true;
    }elseif($comment->comment_author_email == \'[email protected]\'){
        $PostAuthor = true;
    }
?>

<div class="panel panel-default entry" id="comment-<?php echo $comment->comment_ID; ?>"  itemprop="suggestedAnswer" itemscope itemtype="http://schema.org/Answer">
    <div class="panel-body">
        <div itemprop="text">  </div>
    </div>
    <div class="panel-footer clearfix">
       <?php comment_text(); ?>
    </div>
</div>
<?php

    // If we haven\'t had two comments, don\'t show the ad.
    if ( 2 > $count ) {
        // Increment $count by 1.
        $count++;
        return;
    }

    /**
     * Your Ad Code
     */

    // Reset count to zero.
    $count = 0;
}

相关推荐

WordPress子主题,创建自定义php模板页面

我目前正在从事一个使用子主题(店面是父主题)的项目。我需要能够使用纯php/javascript(在wordpress管理之外)进行编码。其他自定义模板页具有*-content.php 结构,例如:foo-content.php.我创建了我想开发的自定义页面。然而,当访问url时,我会看到一个空白的白色页面。我很难理解为什么会这样。此外,我尝试转到wordpress管理并在管理中创建页面,使其与我创建的文件名匹配my.domain.com/foo, 似乎什么都没用-我一直得到一个空白的白页,没有错误。知道