J'essayais de supprimer un div ayant un identifiant de the_content WordPress. J'essaye de réaliser quelque chose comme ça

jQuery( "#some_id" ).remove();

Mais côté serveur,

Je n'ai aucune idée de la façon dont je peux faire cela côté serveur dans le crochet de filtre the_content.

C'est quelque chose que j'aime réaliser,

add_filter( 'the_content', 'my_the_content_filter', 20 );
function my_the_content_filter( $content ) {


    $content.find('#some_id').remove();


    return $content;
}
1
Abdul Waheed 2 mai 2017 à 13:55

3 réponses

Meilleure réponse

Je pense que c'est la réponse à votre problème: https://stackoverflow.com/a/1114925/7335278

Dans votre cas, cela ressemblerait à:

add_filter( 'the_content', 'my_the_content_filter', 20 );
function my_the_content_filter( $content ) {


    $doc = new DOMDocument();
    $doc->loadHTML($content);
    $element = $doc->getElementById('some_id');
    $element->parentNode->removeChild($element);
    $content = $doc->saveHTML();


    return $content;
}

Hth, laissez-nous savoir si cela fonctionnera. bravo, joel

3
Community 23 mai 2017 à 12:02

Désolé pour la réponse précédente. J'ai vu trop tard que ce que j'ai répondu n'était pas ce que vous recherchiez.

Voici quelque chose qui pourrait fonctionner.

$str = "<html><head></head><body><span id='remove_this'>This is one 
text</span><br /><span>this is a text after that</span></body></html>";

$id_pos =  strpos($str, 'remove_this');

$tmp_str = substr($str, ($id_pos-10), (strpos(substr($str, ($id_pos-10)), '</span>' )+7));

$str = str_replace($tmp_str, '', $str);

echo $str;

Dans l'exemple ci-dessus, je commence par rechercher où se trouve l'identifiant dans la chaîne. Ensuite, je fais une fonction de sous-chaîne pour obtenir le début de l'élément html, dans ce cas, étant le span. Ensuite, dans le même appel de sous-chaîne, je recherche la première balise span de fermeture et j'ajoute 7 à la position pour inclure la balise span de fermeture.

Que je remplace le résultat de la sous-chaîne dans la chaîne d'origine et vous obtenez le résultat que vous recherchez.

Je sais qu'il y a toujours de meilleures façons mais celle-ci en est une :)

REMARQUE: Cet exemple du mien utilise une quantité définie de distance entre la position d'identification et le début de la balise, directement après le début. Il y a donc probablement de bien meilleurs moyens d'accéder à la première instance de < en php, mais je ne le sais pas encore.

J'espère que cela pourrait vous amener un peu plus loin. J'aurais pu aussi me lancer dans les expressions régulières, mais c'est plus facile mais c'est la meilleure façon. Les expressions régulières, par contre, sont beaucoup plus complexes et je ne suis pas vraiment familier avec ce genre de choses.

Bravo et encore une fois désolé pour la mauvaise réponse au début.

0
Controvi 2 mai 2017 à 11:35

Le code n'est pas testé. Juste écrit pour vous ... vérifiez ce code ... si cela donne une correction d'erreur syntaxique plz et faites le moi savoir. Mais dans le hook de contenu, HTML / jsscripts ne sont pas en cours d'exécution, vous pouvez donc essayer quelque chose comme ce qui suit -

add_filter( 'the_content', 'my_the_content_filter', 20 );
function my_the_content_filter( $content ) {


   $content = preg_replace("(<([a-z]+id=\"some_id\")>.*?</\\1>)is","",$content);


    return $content;
}
0
Alice 2 mai 2017 à 11:16