WordPress禁用pingback

pingback从功能上来说是好东西,可以让你知道有哪些站外引用了你的文章。但如果你的文章经常引用站内连接的话,就会造成很多Spam,下面提供关闭(禁用)pingback的方法:

WordPress设置pingback

其实后台有这个功能的设置,设置如下:

wordpress_pingback

弊端:如果有新版本发布更新后, WordPress 会自动重置 Pingback 参数。

彻底禁用WordPress pingback

方法一,代码来自No Self Pings插件

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

方法二,更简洁的写法

function deel_setup(){
//阻止站内PingBack
if( dopt('d_pingback_b') ){
add_action('pre_ping','deel_noself_ping');
}
}

方法三,劫持 Pingback 功能的调用函数,完全屏蔽Pingback,代码来自Pingback Killer插件

// Kill the rewrite rules
add_filter( 'rewrite_rules_array', 'pmg_pk_filter_rewrites' );
function pmg_pk_filter_rewrites( $rules )
{
foreach( $rules as $rule => $rewrite )
{
if( preg_match( '/trackback/?$$/i', $rule ) )
{
unset( $rules[$rule] );
}
}
return $rules;
}
// Kill bloginfo( 'pingback_url' )
add_filter( 'bloginfo_url', 'pmg_pk_kill_pingback_url', 10, 2 );
function pmg_pk_kill_pingback_url( $output, $show )
{
if( $show == 'pingback_url' )
{
$output = '';
}
return $output;
}
// hijack options for pingbacks
add_filter( 'pre_update_default_ping_status', '__return_false' );
add_filter( 'pre_option_default_ping_status', '__return_zero' );
add_filter( 'pre_update_default_pingback_flag', '__return_false' );
add_filter( 'pre_option_default_pingback_flag', '__return_zero' );
// Disable XMLRPC call
add_action( 'xmlrpc_call', 'pmg_pk_kill_xmlrpc' );
function pmg_pk_kill_xmlrpc( $action )
{
if( 'pingback.ping' === $action )
{
wp_die(
__( 'Pingbacks are not supported' ),
__( 'Not Allowed!' ),
array( 'response' => 403 )
);
}
}
// Flush rewrite rules on activation/deactivation so our trackback
// rules disappear or reappear on deactivation.
register_activation_hook( __FILE__ , 'flush_rewrite_rules' );
register_deactivation_hook( __FILE__, 'flush_rewrite_rules' );

如果之前有引用通知想清理怎么办?

UPDATE wp_posts SET ping_status='closed';

清理某个时间点

//把2016-03-08以前的文章指定ping_status的值为closed
UPDATE wp_posts SET ping_status = 'closed' WHERE post_date < '2016-03-08'

WordPress pingback真的会被DDOS吗?

网上关于pingback的讨论,多数是在说此功能会被恶意DDOS,从功能上来说,它确实会被利用,但谁又会这么无聊呢?如果你确实担心,那可以采取下面两步操作来规避掉风险。

  1. 禁用WordPress pingback(看上面)
  2. 禁用WordPress xmlrpc服务(看下面)

扔进Functions.php里

//禁用xmlrpc
add_filter('xmlrpc_enabled', '__return_false');

补充:禁用xmlrpc服务同时会影响到第三方客户端使用。