Există o metodă de a dezactiva complet Pingback-urile/Trackback-urile?
Există opțiunea de a dezactiva trackback-urile/pingback-urile în Setări > Discuții
.
Dar aș dori să elimin header-ul X-Pingback
pe care WordPress îl trimite și să elimin complet endpoint-ul trackback
.
Există vreo metodă pentru a face asta?

<?php
/*
Plugin Name: [RPC] XMLRPCless Blog
Plugin URI: http://earnestodev.com/
Description: Dezactivează publicitatea/funcționalitatea XMLRPC pe întregul blog.
Version: 0.0.7
Author: EarnestoDev
Author URI: http://earnestodev.com/
*/
// Dezactivează antetul HTTP X-Pingback.
add_filter('wp_headers', function($headers, $wp_query){
if(isset($headers['X-Pingback'])){
// Elimină X-Pingback
unset($headers['X-Pingback']);
}
return $headers;
}, 11, 2);
// Dezactivează XMLRPC prin interceptare și blocarea opțiunii.
add_filter('pre_option_enable_xmlrpc', function($state){
return '0'; // return $state; // Pentru a lăsa XMLRPC activ și a elimina doar Pingback
});
// Elimină rsd_link din filtre (<link rel="EditURI" />).
add_action('wp', function(){
remove_action('wp_head', 'rsd_link');
}, 9);
// Interceptează pingback_url pentru get_bloginfo (<link rel="pingback" />).
add_filter('bloginfo_url', function($output, $property){
return ($property == 'pingback_url') ? null : $output;
}, 11, 2);
// Dezactivează doar funcționalitatea pingback.ping păstrând XMLRPC activ?
add_action('xmlrpc_call', function($method){
if($method != 'pingback.ping') return;
wp_die(
'Funcționalitatea Pingback este dezactivată pe acest Blog.',
'Pingback Dezactivat!',
array('response' => 403)
);
});
?>
Folosește acest cod pentru un plugin în /wp-content/plugins sau /wp-content/mu-plugins (pentru activare automată). Sau în functions.php.

return '0'
nu va funcționa așa cum te aștepți. Șirul '0'
va returna true. add_filter( 'pre_option_enable_xmlrpc', '__return_false' );

Vezi get_option și cum funcționează pre_option_* hijacking. Dacă folosești __return_false... este ignorat și procesarea continuă în mod normal. Nu trebuie să returnezi nimic === false. Vezi codul.

Mulțumesc pentru ajutor. Am adăugat încă un lucru pentru a dezactiva regulile de rescriere: https://gist.github.com/1309433

@EarnestoDev a avut un răspuns excelent, dar este puțin învechit acum din cauza exploatărilor recente xml-rcp.
Am creat o versiune actualizată care cred că blochează toate accesurile posibile. Rețineți totuși că există câteva pluginuri care utilizează funcționalitatea de pingback/trackback XML-RPC și ar putea avea probleme dacă le folosiți:
- Aplicația Mobilă WordPress
- JetPack LibSyn (pentru podcasturi)
- Unele părți din BuddyPress
- Windows Live Writer
- IFTTT
- Câteva pluginuri pentru galerie
Mai jos găsiți versiunea actualizată. Pentru a o descărca, puteți copia codul într-un fișier de plugin, plasați-l în mu-plugins sau descărcați de pe github:
<?php
/*
Plugin Name: BYE BYE Pingback
Plugin URI: https://github.com/Wordpress-Development/bye-bye-pingback/
Description: Eliminarea pingback-ului WordPress
Version: 1.0.0
Author: bryanwillis
Author URI: https://github.com/bryanwillis/
*/
// Dacă fișierul este accesat direct, oprește execuția.
if ( ! defined( 'WPINC' ) ) {
die;
}
/**
* Directivă htaccess pentru blocarea xmlrcp pentru securitate sporită.
* Iată câteva exemple de rescriere:
* 404 - RewriteRule xmlrpc\.php$ - [R=404,L]
* 301 - RewriteRule ^xmlrpc\.php$ index.php [R=301]
* Dacă doriți o pagină 404 personalizată, asigurați-vă că serverul o găsește adăugând 'ErrorDocument 404 /index.php?error=404' sau 'ErrorDocument 404 /wordpress/index.php?error=404' pentru site-uri în subdirector.
*/
add_filter('mod_rewrite_rules', 'noxmlrpc_mod_rewrite_rules'); // ar trebui să punem asta în interiorul wp_loaded sau a unui hook de activare
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);
}
// Elimină rsd_link din filtre - link rel="EditURI"
add_action('wp', function(){
remove_action('wp_head', 'rsd_link');
}, 9);
// Elimină pingback din 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);
}
// Returnează pingback_url gol (<link rel="pingback" href>).
add_filter('bloginfo_url', function($output, $property){
return ($property == 'pingback_url') ? null : $output;
}, 11, 2);
// Dezactivează 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' );
// Dezactivează trackback-uri
add_filter( 'rewrite_rules_array', function( $rules ) {
foreach( $rules as $rule => $rewrite ) {
if( preg_match( '/trackback\/\?\$$/i', $rule ) ) {
unset( $rules[$rule] );
}
}
return $rules;
});
// Dezactivează antetul HTTP X-Pingback.
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'] ); // Blochează descoperirea forțată a utilizatorilor existenți
unset( $methods['system.multicall'] );
unset( $methods['system.listMethods'] );
unset( $methods['system.getCapabilities'] );
return $methods;
});
// Dezactivează doar funcționalitatea pingback.ping păstrând XMLRPC activ?
add_action('xmlrpc_call', function($method){
if($method != 'pingback.ping') return;
wp_die(
'Acest site nu are funcționalitate de pingback.',
'Pingback dezactivat!',
array('response' => 403)
);
});
De asemenea, dacă doriți să închideți toate pingback-urile existente, urmați acești pași:
1) Deschideți phpmyadmin și navigați la secțiunea SQL:
2) Introduceți următoarele:
UPDATE wp_posts SET ping_status="closed";
3) Toate pingback-urile existente ar trebui să fie acum închise
