Có cách nào để tắt hoàn toàn Pingbacks / Trackbacks không?


13

Có tùy chọn tắt trackbacks / pingbacks bên dưới Settings > Discussion.

Nhưng tôi muốn xóa X-Pingbacktiêu đề mà WordPress gửi và xóa hoàn toàn trackbackđiểm cuối.

Có cách nào để làm việc này không?

Câu trả lời:


12
<?php
/*
Plugin Name: [RPC] XMLRPCless Blog
Plugin URI: http://earnestodev.com/
Description: Disable XMLRPC advertising/functionality blog-wide.
Version: 0.0.7
Author: EarnestoDev
Author URI: http://earnestodev.com/
*/
// Disable X-Pingback HTTP Header.
add_filter('wp_headers', function($headers, $wp_query){
    if(isset($headers['X-Pingback'])){
        // Drop X-Pingback
        unset($headers['X-Pingback']);
    }
    return $headers;
}, 11, 2);
// Disable XMLRPC by hijacking and blocking the option.
add_filter('pre_option_enable_xmlrpc', function($state){
    return '0'; // return $state; // To leave XMLRPC intact and drop just Pingback
});
// Remove rsd_link from filters (<link rel="EditURI" />).
add_action('wp', function(){
    remove_action('wp_head', 'rsd_link');
}, 9);
// Hijack pingback_url for get_bloginfo (<link rel="pingback" />).
add_filter('bloginfo_url', function($output, $property){
    return ($property == 'pingback_url') ? null : $output;
}, 11, 2);
// Just disable pingback.ping functionality while leaving XMLRPC intact?
add_action('xmlrpc_call', function($method){
    if($method != 'pingback.ping') return;
    wp_die(
        'Pingback functionality is disabled on this Blog.',
        'Pingback Disabled!',
        array('response' => 403)
    );
});
?>

Sử dụng công cụ này cho plugin trong / wp-content / plugin hoặc / wp-content / mu-plugins (để tự động kích hoạt) . Hoặc functions.php .

Điều thú vị là tôi bán Thư viện xuất bản từ xa WordPress và cung cấp cho bạn mã để vô hiệu hóa XMLRPC :) Không tốt cho danh tiếng.


return '0'sẽ không làm việc như bạn mong đợi. Chuỗi '0'sẽ trả về true. add_filter( 'pre_option_enable_xmlrpc', '__return_false' );
chrisguitarguy

1
var_dump ((bool) '0');
EarnestoDev

Xem get_option và cách hoạt động của không tặc pre_option_ *. Nếu bạn __return_false ... nó bị bỏ qua và quá trình xử lý được tiếp tục như bình thường. Bạn không được trả lại bất cứ điều gì === sai. Xem mã.
EarnestoDev

3
Cảm ơn đã giúp đỡ. Đã thêm một điều nữa để vô hiệu hóa các quy tắc viết lại: gist.github.com/1309433
chrisguitarguy

5

@EarnestoDev đã có một câu trả lời tuyệt vời , nhưng bây giờ nó đã hơi lỗi thời kể từ khi khai thác xml-RCp gần đây .

Tôi đã tạo một phiên bản cập nhật mà tôi nghĩ rằng chặn tất cả quyền truy cập vào nó. Hãy lưu ý rằng có một số bổ trợ ngoài đó sử dụng chức năng pingback / trackback XML-RPC và có thể có vấn đề nếu bạn đang sử dụng chúng:

  • Ứng dụng di động WordPress
  • JetPack LibSyn (dành cho podcast)
  • Một số phần của BuddyPress
  • Windows Live Writer
  • IFTTT
  • Một vài plugin thư viện

Đây là một phiên bản cập nhật dưới đây. Để tải xuống, bạn có thể sao chép nó vào tệp plugin, đăng nhập vào mu-plugin hoặc tải xuống trên github :

<?php
/*
Plugin Name:        BYE BYE Pingback
Plugin URI:         https://github.com/Wordpress-Development/bye-bye-pingback/
Description:        Banishment of wordpress pingback
Version:            1.0.0
Author:             bryanwillis
Author URI:         https://github.com/bryanwillis/
*/

// If this file is called directly, abort.
if ( ! defined( 'WPINC' ) ) {
    die;
}

/**
 * Htaccess directive block xmlrcp for extra security.
 * Here are some rewrite examples:
 *   404 - RewriteRule xmlrpc\.php$ - [R=404,L]
 *   301 - RewriteRule ^xmlrpc\.php$ index.php [R=301]
 * If you want custom 404 make sure your server is finding it by also adding this 'ErrorDocument 404 /index.php?error=404' or 'ErrorDocument 404 /wordpress/index.php?error=404' for sites in subdirectory.
 */ 
add_filter('mod_rewrite_rules', 'noxmlrpc_mod_rewrite_rules'); // should we put this inside wp_loaded or activation hook
function noxmlrpc_mod_rewrite_rules($rules) {
  $insert = "RewriteRule xmlrpc\.php$ - [F,L]";
  $rules = preg_replace('!RewriteRule!', "$insert\n\nRewriteRule", $rules, 1);
  return $rules;
}

register_activation_hook(__FILE__, 'noxmlrpc_htaccess_activate');
function noxmlrpc_htaccess_activate() {
  flush_rewrite_rules(true);
}

register_deactivation_hook(__FILE__, 'noxmlrpc_htaccess_deactivate');
function noxmlrpc_htaccess_deactivate() {
  remove_filter('mod_rewrite_rules', 'noxmlrpc_mod_rewrite_rules');
  flush_rewrite_rules(true);
}


// Remove rsd_link from filters- link rel="EditURI"
add_action('wp', function(){
    remove_action('wp_head', 'rsd_link');
}, 9);


// Remove pingback from head (link rel="pingback")
if (!is_admin()) {      
    function link_rel_buffer_callback($buffer) {
        $buffer = preg_replace('/(<link.*?rel=("|\')pingback("|\').*?href=("|\')(.*?)("|\')(.*?)?\/?>|<link.*?href=("|\')(.*?)("|\').*?rel=("|\')pingback("|\')(.*?)?\/?>)/i', '', $buffer);
                return $buffer;
    }
    function link_rel_buffer_start() {
        ob_start("link_rel_buffer_callback");
    }
    function link_rel_buffer_end() {
        ob_flush();
    }
    add_action('template_redirect', 'link_rel_buffer_start', -1);
    add_action('get_header', 'link_rel_buffer_start');
    add_action('wp_head', 'link_rel_buffer_end', 999);
}


// Return pingback_url empty (<link rel="pingback" href>).
add_filter('bloginfo_url', function($output, $property){
    return ($property == 'pingback_url') ? null : $output;
}, 11, 2);


// Disable xmlrcp/pingback
add_filter( 'xmlrpc_enabled', '__return_false' );
add_filter( 'pre_update_option_enable_xmlrpc', '__return_false' );
add_filter( 'pre_option_enable_xmlrpc', '__return_zero' );

// Disable trackbacks
add_filter( 'rewrite_rules_array', function( $rules ) {
    foreach( $rules as $rule => $rewrite ) {
        if( preg_match( '/trackback\/\?\$$/i', $rule ) ) {
            unset( $rules[$rule] );
        }
    }
    return $rules;
});


// Disable X-Pingback HTTP Header.
add_filter('wp_headers', function($headers, $wp_query){
    if(isset($headers['X-Pingback'])){
        unset($headers['X-Pingback']);
    }
    return $headers;
}, 11, 2);


add_filter( 'xmlrpc_methods', function($methods){
    unset( $methods['pingback.ping'] );
    unset( $methods['pingback.extensions.getPingbacks'] );
    unset( $methods['wp.getUsersBlogs'] ); // Block brute force discovery of existing users
    unset( $methods['system.multicall'] );
    unset( $methods['system.listMethods'] );
    unset( $methods['system.getCapabilities'] );
    return $methods;
});


// Just disable pingback.ping functionality while leaving XMLRPC intact?
add_action('xmlrpc_call', function($method){
    if($method != 'pingback.ping') return;
    wp_die(
        'This site does not have pingback.',
        'Pingback not Enabled!',
        array('response' => 403)
    );
});


Ngoài ra, nếu bạn muốn đóng tất cả pingback hiện có, hãy làm theo các bước sau:

1) Mở phpmyadmin và điều hướng đến phần SQL:

sql

2) Nhập thông tin sau:

UPDATE wp_posts SET ping_status="closed";

3) Tất cả các pingback hiện có nên được đóng lại

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.