J'essaie de faire quelque chose de similaire à cette question ici: remove_action ou remove_filter avec des classes externes?
J'essaie d'enlever le
<!-- This site is optimized with the Yoast WordPress SEO plugin v1.0.3 - http;//yoast.com/wordpress/seo/ -->
message du plugin.
Et avant de crier après moi à quel point cela peut être contraire à l'éthique, l'auteur dit qu'il est acceptable de le faire ici: http://wordpress.org/support/topic/plugin-wordpress-seo-by-yoast-how-to-remove -dangerous-insert-yoast-message-in-en-têtes? replies = 29 # post-2503475
J'ai trouvé la classe qui ajoute le commentaire ici: http://plugins.svn.wordpress.org/wordpress-seo/tags/1.2.8.7/frontend/class-frontend.php
Fondamentalement, la classe WPSEO_Frontend
a une fonction nommée debug_marker
qui est ensuite appelée par une fonction nommée head
qui est ensuite ajoutée à wp_head
dans __Construct
Je suis nouveau en classe, mais j'ai trouvé un moyen de retirer complètement la tête en faisant
global $wpseo_front;
remove_action( 'wp_head', array($wpseo_front,'head'), 1, 1 );
mais je veux seulement enlever la partie debug_marker
. J'ai essayé ça mais ça ne marche pas remove_action( 'wp_head', array($wpseo_front,'head','debug_marker'), 1, 1 );
Comme je l'ai dit, je suis nouveau en classe, alors toute aide serait la bienvenue.
Un moyen simple d'y parvenir (mais sans l'approche Class) consiste à filtrer la sortie du hook wp_head
à l'aide de output buffering .
Dans le header.php
de votre thème, encapsulez l'appel wp_head()
avec les fonctions ob_start($cb)
et ob_end_flush();
telles que:
ob_start('ad_filter_wp_head_output');
wp_head();
ob_end_flush();
Maintenant, dans le fichier thème functions.php
, déclarez votre fonction de rappel en sortie (ad_filter_wp_head_output
dans ce cas):
function ad_filter_wp_head_output($output) {
if (defined('WPSEO_VERSION')) {
$output = str_ireplace('<!-- This site is optimized with the Yoast WordPress SEO plugin v' . WPSEO_VERSION . ' - http://yoast.com/wordpress/seo/ -->', '', $output);
$output = str_ireplace('<!-- / Yoast WordPress SEO plugin. -->', '', $output);
}
return $output;
}
Si vous voulez faire tout cela à travers le fichier functions.php
sans éditer le fichier header.php
, vous pouvez vous connecter aux hooks d'action get_header
et wp_head
pour définir la session de mise en mémoire tampon de sortie:
add_action('get_header', 'ad_ob_start');
add_action('wp_head', 'ad_ob_end_flush', 100);
function ad_ob_start() {
ob_start('ad_filter_wp_head_output');
}
function ad_ob_end_flush() {
ob_end_flush();
}
function ad_filter_wp_head_output($output) {
if (defined('WPSEO_VERSION')) {
$output = str_ireplace('<!-- This site is optimized with the Yoast WordPress SEO plugin v' . WPSEO_VERSION . ' - http://yoast.com/wordpress/seo/ -->', '', $output);
$output = str_ireplace('<!-- / Yoast WordPress SEO plugin. -->', '', $output);
}
return $output;
}
Merci pour toute votre aide, je l'ai finalement résolu. J'ai créé un functions.php pour mon thème enfant, puis ajoutez
// we get the instance of the class
$instance = WPSEO_Frontend::get_instance();
/* then we remove the function
You can remove also others functions, BUT remember that when you remove an action or a filter, arguments MUST MATCH with the add_action
In our case, we had :
add_action( 'wpseo_head', array( $this, 'debug_marker' ), 2 );
so we do :
remove_action( 'wpseo_head', array( $this, 'debug_marker' ), 2 );
*/
remove_action( 'wpseo_head', array( $instance, 'debug_marker' ), 2 );
Je ne pense pas que vous allez pouvoir le faire en utilisant remove_action
. L'argument de la fonction dans remove_action
ne vous aidera pas, car la fonction debug_marker()
n'était pas la fonction utilisée dans l'appel add_action()
.
Yoast a probablement quelque chose comme add_action( "wp_head", "head" )
dans son code. Vous pouvez donc supprimer la fonction "head", mais debug_marker
n'a pas été explicitement ajouté en tant qu'action.
Vous pourriez
WPSEO_Frontend
et surchargez la fonction debug_marker
pour renvoyer "". TBH, je ne suis pas sûr de savoir comment cela fonctionnerait en termes de WP charger le plugin, mais cela pourrait valoir la peine d’être étudié.Trouver ce fil après avoir travaillé sur la même solution que celle mentionnée par Steve Claridge
, c'est-à-dire:
Étendre la classe WPSEO_Frontend
et surcharger la fonction debug_marker
pour renvoyer ""
J'ai détaillé les étapes ci-dessous, même si je suis coincé dans la dernière étape.
Comme mentionné dans cet article de WP Tavern , "le moyen le plus simple d'y parvenir est de créer un plugin de fonctionnalité qui s'exécutera à côté de celui-ci".
Je suis donc allé à créant mon premier plugin à la suite de cet article de ElegantTheme .
C'est à ce moment que les choses se sont compliquées. J'ai ajouté ce qui suit, mais ma fonction prioritaire n'est toujours pas déclenchée pour une raison quelconque.
//get the base class
if(!class_exists('WPSEO_Frontend')) {
require_once $_SERVER['DOCUMENT_ROOT'] . '/wp-content/plugins/wordpress-seo/frontend/class-frontend.php';
}
/**
* Class Definition
*/
class WPSEO_Frontend_GUP extends WPSEO_Frontend{
/**
*
* OVERRIDES function from YOAST SEO
*
* Outputs or returns the debug marker, which is also used for title replacement when force rewrite is active.
*
* @param bool $echo Whether or not to echo the debug marker.
*
* @return string
*/
public function debug_marker( $echo = true ) {
return '';
}
}
J'ai constaté que vous pouvez supprimer l'action debug_marker dans functions.php. Le plug-in Yoast est exécuté dans l'action wp_head. Je viens de prendre le hook d’action qui suit directement après cela, à savoir wp_enqueue_scripts et j’y ai accroché une fonction qui a supprimé la sortie debug_marker. Pour cela, vous devez également passer l'objet plugin. De plus, le numéro de priorité doit être identique à celui défini dans le plug-in.
function remove_debugmarker(){
global $wpseo_front;
remove_action( 'wpseo_head', array($wpseo_front, 'debug_marker') , 2 );
}
add_action('wp_enqueue_scripts','remove_debugmarker');
Cependant, cela ne supprime pas le
<!-- / Yoast WordPress SEO plugin. -->
partie, parce que cela se répercute dans la fonction d’emballage cruciale du plugin head . Vous pouvez essayer d'écraser cela.
Pour ajouter à la réponse d'Ahmad, vous pouvez simplement supprimer tous les commentaires html avec la même quantité de code, car Yoast n'est pas le seul plug-in à le faire.
<?php
function remove_html_comments_buffer_callback($buffer) {
$buffer = preg_replace('/<!--[^\[\>\<](.|\s)*?-->/', '', $buffer);
return $buffer;
}
function remove_html_comments_buffer_start() {
ob_start("remove_html_comments_buffer_callback");
}
function remove_html_comments_buffer_end() {
ob_end_flush();
}
add_action('template_redirect', 'remove_html_comments_buffer_start', -1);
add_action('get_header', 'remove_html_comments_buffer_start');
add_action('wp_footer', 'remove_html_comments_buffer_end', 999);
Je suis tombé sur un extrait qui supprime tous les commentaires Yoast WordPress SEO du début à la fin. Il modifie également l'approche de mise en mémoire tampon de sortie utilisée par les réponses de @ bryan-willis et de @ ahmad-m.
Placez simplement l'extrait de code sur le functions.php
de votre thème ou sur un fichier php de plugin/thème personnalisé.
Je le laisse ici comme référence - le mérite revient à l'auteur de l'extrait de code
/**
* Yoast WordPress SEO Plugin - Remove All Yoast HTML Comments
* See at: https://Gist.github.com/paulcollett/4c81c4f6eb85334ba076
**/
if (defined('WPSEO_VERSION')){
add_action('get_header',function (){ ob_start(function ($o){
return preg_replace('/\n?<.*?yoast.*?>/mi','',$o); }); });
add_action('wp_head',function (){ ob_end_flush(); }, 999);
}
Ceci est une version modifiée de @ ahmad-m Answer , en appliquant des filtres, vous pouvez apporter plusieurs modifications au contenu de l'en-tête html.
function header_str_replace_start(){
ob_start('header_str_replace_output');
}
function header_str_replace_output($output){
return apply_filters('header_str_replace', $output);
}
function header_str_replace_finish(){
ob_end_flush();
}
add_action('get_header', 'header_str_replace_start',-1);
add_action('wp_head', 'header_str_replace_finish', 999);
add_filter( 'header_str_replace', 'remove_yeost_seo_comments' ) ;
add_filter( 'header_str_replace', 'remove_white_space');
function remove_yeost_seo_comments($output) {
$output = str_ireplace('<!-- / Yoast SEO plugin. -->', '', $output);
return $output;
}
function remove_white_space($content){
return trim(preg_replace('/\s+/', ' ', $content));
}