वहाँ पूरी तरह से बंद करने के लिए एक रास्ता है Pingbacks / Trackbacks?


13

के तहत ट्रैकबैक / पिंगबैक को बंद करने का विकल्प है Settings > Discussion

लेकिन मैं X-Pingbackशीर्ष लेख WordPress भेजता है और पूरी तरह से trackbackसमापन बिंदु को दूर करना चाहते हैं ।

क्या इसे करने का कोई तरीका है?

जवाबों:


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)
    );
});
?>

एक प्लगइन में के लिए इसका उपयोग करें / WP-सामग्री / plugins या / WP-सामग्री / म्यू प्लगइन्स (स्वत: सक्रिय करने के लिए) । या फ़ंक्शनएफपी

मजेदार बात यह है कि मैं एक वर्डप्रेस रिमोट पब्लिशिंग लाइब्रेरी बेच रहा हूं और आपको प्रतिष्ठा के लिए XMLRPC :) बैड को अक्षम करने का कोड दिया है


return '0'आपकी अपेक्षा के अनुरूप काम नहीं हो रहा है। स्ट्रिंग '0'सही लौटेगी। add_filter( 'pre_option_enable_xmlrpc', '__return_false' );
क्रिसगुइटगर्गी

1
var_dump ((bool) '0');
अर्नस्टोदेव

Get_option देखें और कैसे pre_option_ * अपहरण कार्य करता है। यदि आप __return_false ... इसे अनदेखा किया जाता है और प्रसंस्करण हमेशा की तरह फिर से शुरू किया जाता है। आपको कुछ भी वापस नहीं करना चाहिए === असत्य कोड देखें।
अर्नस्टोदेव

3
सहायता के लिए धन्यवाद। फिर से लिखना नियमों को निष्क्रिय करने के लिए एक और बात जोड़ी गई: gist.github.com/1309433
chrisguitarguy

5

@EestestoDev के पास एक शानदार जवाब था , लेकिन हाल ही के xml-rcp के कारनामों के बाद से यह थोड़ा पुराना है ।

मैंने एक अद्यतन संस्करण बनाया है जो मुझे लगता है कि इसके लिए हर संभव पहुंच को अवरुद्ध करता है। ध्यान दें कि वहाँ कुछ प्लगइन्स हैं जो XML-RPC पिंगबैक / ट्रैकबैक कार्यक्षमता का उपयोग करते हैं और यदि आप उनका उपयोग कर रहे हैं तो समस्याएँ हो सकती हैं:

  • वर्डप्रेस मोबाइल ऐप
  • JetPack LibSyn (पॉडकास्ट के लिए)
  • बड्डीप्रेस के कुछ हिस्से
  • विंडोज लाइव लेखक
  • IFTTT
  • कुछ गैलरी प्लगइन्स

यहाँ एक अद्यतन संस्करण नीचे दिया गया है। इसे डाउनलोड करने के लिए आप इसे एक प्लगइन फाइल में कॉपी कर सकते हैं, म्यू-प्लग में ड्रॉप कर सकते हैं या इसे गिथब पर डाउनलोड कर सकते हैं :

<?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)
    );
});


यदि आप सभी मौजूदा पिंगबैक को बंद करना चाहते हैं, तो इन चरणों का पालन करें:

1) phpmyadmin खोलें और SQL अनुभाग पर जाएँ:

एसक्यूएल

2) निम्नलिखित दर्ज करें:

UPDATE wp_posts SET ping_status="closed";

3) सभी मौजूदा पिंगबैक को अब बंद कर दिया जाना चाहिए

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.