wake-up-neo.com

댓글 검토에서 내부 링크를 제외 하시겠습니까?

설정 - 토론 - 댓글 검토의 첫 번째 옵션은 다음과 같습니다.

"1"이상의 링크가 포함되어 있으면 대기열에 주석을 유지합니다. (스팸 덧글의 공통된 특징은 많은 수의 하이퍼 링크입니다.)

유용하지만 내부 링크를 무시한 경우 내 방문자에게 훨씬 더 좋습니다. 여러 번 사용자가 사이트의 다른 기사를 참조하는 것은 좋은 일입니다. 하지만 그들은 사용자와 관리자 모두에게 짜증나는 절제 대기열에 걸리게됩니다.

도메인을 허용 목록에 추가하려면이 설정을 필터링하는 방법이 있습니까? WordPress가 호스팅되는 도메인과 같습니다.

3
Michael Rogers

comment_max_links_url 필터

주석의 내용에있는 내부 링크의 수를 세고 check_comment() 핵심 함수 내부의 다음 필터를 사용하여 거기에서 발견 된 총 링크 수 ($num_links)에서 빼십시오.

/**
 * Filters the number of links found in a comment
 *
 * @since 3.0.0
 * @since 4.7.0 Added the `$comment` parameter.
 *
 * @param int    $num_links The number of links found.
 * @param string $url       Comment author's URL. Included in allowed links total.
 * @param string $comment   Content of the comment.
 */
 $num_links = apply_filters( 'comment_max_links_url', $num_links, $url, $comment );

코어는 href 속성을 포함하는 <a> 태그의 수만 계산합니다.

$num_links = preg_match_all( '/<a [^>]*href/i', $comment, $out );

데모 플러그인 - 홈 URL 호스트의 링크 허용

다음은 주석 내용에 내부 링크를 허용하는 예제입니다.

/**
 * Allow any internal links from the home url Host, in the comment's content
 *
 * @see http://wordpress.stackexchange.com/a/257917/26350
 */

add_filter( 'comment_max_links_url', function( $num_links, $url, $comment )
{
    // Allowed hosts
    $allowed_Host = wp_parse_url( home_url(), PHP_URL_Host );

    // Get all links
    $all_links = preg_match_all( 
        '/<a [^>]*href=["\']([^"\']+)/i', 
        $comment, 
        $links 
    );

    // No links
    if( empty( $links[1] ) || ! is_array( $links[1] ) )
        return $num_links;

    // Count links that are from our home url domain
    $internal_links = array_reduce( 
        $links[1], 
        function( $internal, $link ) use ( $allowed_Host )
        {   
            if( $allowed_Host === wp_parse_url( $link, PHP_URL_Host ) )
                $internal += 1;

            return $internal;
         },
         0 
    );

    return ( $num_links - $internal_links );
}, 10, 3 );

데모 플러그인 - 여러 호스트의 링크 허용

다음은 허용 된 호스트가 여러 개인 예입니다.

/**
 * Allow any internal links, from multiple allowed hosts, in the comment's content
 *
 * @see http://wordpress.stackexchange.com/a/257917/26350
 */

add_filter( 'comment_max_links_url', function( $num_links, $url, $comment )
{
    // Allowed hosts
    $allowed_hosts = [ 'foo.tld', 'bar.tld' ]; // <-- Adjust to your needs!

    // Get all links
    $all_links = preg_match_all( 
        '/<a [^>]*href=["\']([^"\']+)/i', 
        $comment, 
        $links 
    );

    // No links
    if( empty( $links[1] ) || ! is_array( $links[1] ) )
        return $num_links;

    // Count links that are from our allowed hosts
    $internal_links = array_reduce( 
        $links[1], 
        function( $internal, $link ) use ( $allowed_hosts )
        {
            if( in_array( wp_parse_url( $link, PHP_URL_Host ), $allowed_hosts, true ) )
                $internal += 1;

            return $internal;
         },
         0 
    );

    return ( $num_links - $internal_links );
}, 10, 3 );

우리는 내부 링크의 계산을 돕기 위해 array_reduce()wp_parse_url() 을 사용했습니다. 또는 위의 플러그인에서 허용 된 호스트의 링크.

더 테스트하고 필요에 맞게 조정하십시오!

2
birgire