Interne Links von Kommentarmoderation ausschließen?

Die erste Option unter Einstellungen – Diskussion – Kommentarmoderation lautet:

Halten Sie einen Kommentar in der Warteschlange, wenn er “1” oder mehr Links enthält. (Eine häufige Eigenschaft von Kommentar-Spam ist eine große Anzahl von Hyperlinks.)

Das ist nützlich, aber es wäre viel besser für mich und meine Besucher, wenn interne Links ignoriert würden. Viele Male verweisen Benutzer auf andere Artikel der Website und das ist eine gute Sache. Aber sie werden in der Moderationswarteschlange gefangen, was sowohl für die Benutzer als auch für den Administrator lästig ist.

Gibt es eine Möglichkeit, diese Einstellungen auf Whitelist-Domains zu filtern? Wie die Domain, in der WordPress gehostet wird.

Solutions Collecting From Web of "Interne Links von Kommentarmoderation ausschließen?"

Der Filter ” comment_max_links_url

Wir können die Anzahl der internen Links im Kommentarinhalt zählen und diese von der Gesamtzahl der gefundenen Links ( $num_links ) mit Hilfe des folgenden Filters in der check_comment() :

 /** * 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 ); 

Der core zählt nur die Anzahl der -Tags, die das href Attribut enthalten, mit:

 $num_links = preg_match_all( '/]*href/i', $comment, $out ); 

Demo-Plugin – Erlaubt Links vom Home-URL-Host

Hier ein Beispiel, um alle internen Links im Inhalt des Kommentars zuzulassen:

 /** * 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( '/]*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 ); 

Demo-Plugin – Erlaubt Links von mehreren Hosts

Hier ist ein Beispiel mit mehreren erlaubten Hosts:

 /** * 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( '/]*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 ); 

Wir haben array_reduce() und wp_parse_url() , um die internen Links oder Links von erlaubten Hosts in den obigen Plugins zu zählen.

Bitte testen Sie es weiter und passen Sie es Ihren Bedürfnissen an!