禁用WordPress帖子上的外部Pingack,并仅允许‘self ping’

时间:2021-09-03 作者:Aditya Agarwal

我在社交媒体网站上使用wordpress。WordPress ping允许其他博客帖子在链接到我们时出现在评论中。

我想将其限制为仅在我自己的网站上创建博客帖子。基本上,我只需要自我ping/trackback。

如果其他站点尝试发送ping,则拒绝它和它们,但如果我自己的站点https://milyin.com的帖子试图发送一个ping,并立即接受它并在评论部分显示。

我试过了,wp-admin -&燃气轮机;discussion -&燃气轮机;(取消选择)Allow links from other blog posts.

但这也会禁用内部ping。其次,我的作者能够为每个帖子打开/关闭pingback。因此,许多帖子仍然接收外部ping。

以下是相同的截图:https://snipboard.io/8lVIrE.jpg

我试着编写一些代码。

我从中找到了一个教程How Disable Self Pingbacks in WordPress

我试着修改它以满足我的需要

function SelfPing( &$links ) {
    $Home = get_option( \'home\' );
    foreach ( $links as $l => $link ){
        if ( strpos( $link, $Home )  === false){
            unset($links[$l]);
        }
    }
}
add_action( \'pre_ping\', \'SelfPing\' );

然而,这并没有解决目的。

我仍然在我的帖子上收到来自各种网站的ping,因为我的大多数作者都手动打开ping。

所以,即使我的作者手动打开所有帖子的ping,我如何才能只进行自我ping,并删除外部ping。

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

如果您只想从自己的WordPress站点接收链接,请尝试以下两种方法:

但是如果要允许所有作为trackbacks发送的内容(其中注释类型为trackback), 然后忽略下面的第二个片段,我添加了第二个片段,因为在默认/核心主题(如Twenty-Twenty-1)中,pingback和trackback都会显示为“a”;Pingback“;在帖子的评论部分。

这使用xmlrpc_call action 禁用pingbacks 通过XML-RPC方法发送:

add_action( \'xmlrpc_call\', \'disallow_external_xmlrpc_pingback\', 10, 3 );
function disallow_external_xmlrpc_pingback( $name, $args, $server ) {
    if ( \'pingback.ping\' == $name && false === strpos( $args[0], home_url() ) ) {
        // Exit with a proper error.
        $server->error( new IXR_Error( 0, \'Sorry, trackbacks from remote sites are not allowed.\' ) );
    }
}
pre_trackback_post action 禁用trackbacks 通过标准HTTP POST方法发送(即不使用XML-RPC):

add_action( \'pre_trackback_post\', \'disallow_external_POST_trackback\', 10, 2 );
function disallow_external_POST_trackback( $tb_id, $tb_url ) {
    if ( false === strpos( $tb_url, home_url() ) ) {
        // Exit with a proper error.
        trackback_response( 1, \'Sorry, trackbacks from remote sites are not allowed.\' );
    }
}
$home 未定义,应该是$Home (注意大写字母“H”,请参见this 上面写着变量名区分大小写(“:))。

SO网友:vlood

如果除了pingbacks/trackbacks之外,您在WordPress中没有使用任何其他XMLRPC服务,那么您可以尝试将请求限制为xmlrpc.php 通过将此文件添加到.htaccess 文件

<Files xmlrpc.php>
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Files>
只有当您的Web服务器是Apache并且配置为读取本地数据时,这才有效.htaccess 覆盖其主配置的文件。Nginx、Litespeed等不使用.htaccess 不管是什么文件,所以没有必要尝试使用它们。

编辑:

如果您正在使用xmlrpc.php 对于其他东西,你也可以使用xmlrpc_call 钩子以检查调用是否是pingback,以及它是否来自正确的地址(localhost)。以下是它的外观(理论上):

add_action( \'xmlrpc_call\', \'limit_to_local_pingbacks\', 10, 3 );
function limit_to_local_pingbacks( string $type_of_call, array|string $args, wp_xmlrpc_server $server ) {
    if ( \'pingback.ping\' !== $type_of_call ) {
        return;
    }
    if ( \'127.0.0.1\' !== $_SERVER[\'REMOTE_ADDR\'] ) {
        wp_die();
    }

}