1

この php スクリプトを使用して、wordpress の投稿から外部リンク (内部リンクではなく) を削除しています。

if ( ! preg_match_all( "/(<a.*>)(.*)(<\/a>)/ismU", $content, $outbound_links, PREG_SET_ORDER ) ) {
    return $content;
}

foreach ( $outbound_links as $key => $value ) {
    preg_match( "/href\s*=\s*[\'|\"]\s*(.*)\s*[\'|\"]/i", $value[1], $href );

    if ( ( substr( $href[1], 0, 7 ) != 'http://' && substr( $href[1], 0, 8 ) != 'https://' ) || substr( $href[1], 0, strlen( get_bloginfo( 'url' ) ) ) == get_bloginfo( 'url' ) ) {
        unset( $outbound_links[ $key ] );
    } else {
        $content = str_replace( $outbound_links[ $key ][0], $outbound_links[ $key ][2], $content );
    }
}

しかし、このスクリプトは 'a' タグを削除しますが、アンカー テキストは削除しません (たとえば、 に変換<a href="http://externalsite.com">external site</a>されますが、アンカー テキストexternal siteも消去したいのですexternal site。これまでのところ、このスクリプトを変更して目的を達成することに成功していません。ここで私?

4

1 に答える 1

2

$content =次のように始まる行を変更すると機能するはずです。

if ( ! preg_match_all( "/(<a.*>)(.*)(<\/a>)/ismU", $content, $outbound_links, PREG_SET_ORDER ) ) {
    return $content;
}

foreach ( $outbound_links as $key => $value ) {
    preg_match( "/href\s*=\s*[\'|\"]\s*(.*)\s*[\'|\"]/i", $value[1], $href );

    if ( ( substr( $href[1], 0, 7 ) != 'http://' && substr( $href[1], 0, 8 ) != 'https://' ) || substr( $href[1], 0, strlen( get_bloginfo( 'url' ) ) ) == get_bloginfo( 'url' ) ) {
        unset( $outbound_links[ $key ] );
    } else {
        $content = str_replace( $outbound_links[ $key ][0], '', $content );
    }
}

その理由は、現在の状態では、見つかったリンクが正規表現の 2 番目の一致に置き換えられますが、何も置き換えずに完全に削除したいためです。

于 2013-08-06T14:51:02.963 に答える