J'ai un code ajouté dynamiquement dans mon pied de page via add_action('wp_footer' ...)
. Malheureusement, je ne suis pas sûr de savoir comment le supprimer en utilisant des méthodes conventionnelles. J'ai examiné la question suivante et essayé d'utiliser les solutions proposées:
remove_action ou remove_filter avec des classes externes?
Mais je n’avais aucune chance avec aucune des réponses alors je cherche maintenant des alternatives . Existe-t-il un moyen d'exécuter une sorte de preg_replace
sur le contenu de wp_footer()
? Existe-t-il d'autres moyens de supprimer des éléments dans wp_footer
sans utiliser remove_action()
?
Plus d'informations:
Le plugin a un fichier de sortie . Sur la ligne 697 est l'endroit où l'action est réellement ajoutée:
add_action('wp_footer', array($this, 'add_inline_styles'));
La fonction réelle est définie à la ligne 1743
Je ne savais pas trop s'il fallait faire référence à RevOperations::
ou RevSliderFront::
- Voici le fichier d'installation initial situé à la racine du dossier du plugin.
Puisque vous avez exclu remove_action
, vous ne pouvez le faire que d'une seule façon. Et vous l'avez deviné: preg_repalce
, substr
mélange mais avec un peu d'aide et PHP DOM
add_action('wp_footer', 'my_start_footer_ob', 1);
function my_start_footer_ob() {
ob_start("my_end_footer_ob_callback");
}
add_action('wp_footer', 'my_end_footer_ob', 1000);
function my_end_footer_ob() {
ob_end_flush();
}
function my_end_footer_ob_callback($buffer) {
// remove what you need from he buffer
return $buffer;
}
Dans my_end_footer_ob_callback
, vous modifiez le $buffer
selon vos besoins. Les paramètres $buffer
doivent avoir tout le contenu du pied de page après que toutes les actions et les filtres ont été appelés à l'action. Si cela ne modifie pas simplement 1000
en un nombre plus grand , de sorte que my_end_footer_ob
est appelé en dernier.
Maintenant, je ne sais pas quel contenu HTML cette action produit, mais vous pouvez utiliser pre_replace
ou une séquence de substr
s pour la supprimer.
Si vous voulez utiliser PHP DOM , procédez comme suit:
function my_end_footer_ob_callback($buffer) {
// remove what you need from he buffer
$doc = new DOMDocument;
$doc->loadHTML($buffer);
$docElem = $doc->getElementById("theID");
if($docElem !== NULL) // if it exists
$docElem->parentNode->removeChild($docElem);
return $doc->getElementsByTagName('body')->firstChild->nodeValue;
}
Dis-moi si ça marche pour toi.