✅ Notizie, temi, plugin WEB e WordPress. Qui condividiamo suggerimenti e le migliori soluzioni per siti web.

Come manipolare il DOM usando PHP

51

Quando si tratta di manipolare il DOM, la prima cosa a cui molti di noi probabilmente pensano è usare JavaScript per fare tutto ciò che è necessario.

Non solo il linguaggio supporta nativamente le funzioni per farlo, ma le nuove funzionalità di ES6 ci offrono modi più potenti per creare script lato client. E se stai usando jQuery con WordPress, hai la stessa libreria di funzioni per, ehm, interrogare il DOM che abbiamo da anni.

Ma manipolare il DOM sul lato client non è sempre l’opzione migliore. Invece, potresti volerlo fare sul lato server. E a causa di alcune delle funzionalità integrate in PHP, non è molto diverso da come facciamo le cose usando JavaScript.

A parte, ovviamente, lo stiamo facendo sul server.

Quindi, se stai lavorando con il contenuto di un post (un tipo di post o un tipo di post personalizzato, se è per questo) e hai bisogno di manipolare i tag proprio come faresti con JavaScript, l’uso della DomDocumentlibreria è uno dei più potenti gli strumenti sono a tua disposizione.

Supponiamo, ad esempio, di voler scorrere tutti gli elementi di paragrafo che esistono nel contenuto del post.

È facile farlo usando detta libreria. Innanzitutto, assicurati di avere la libreria configurata nella tua classe (o solo nella tua raccolta di funzioni):

Quindi, imposta un hook per il contenuto:

<?php

add_filter('the_content', __NAMESPACE__. 'updateParagraphElements');

E all’interno di quella funzione, assicurati di caricare il contenuto del post nella libreria e quindi cerca tutti gli pelementi proprio come faresti usando JavaScript (con una nota importante è che devi codificare correttamente le informazioni nel caso in cui gli apici o gli emoji siano Usato):

<?php

function updateParagraphElements($content) 
{
    /* If we're not on a single page or it's not the main query, 
     * we won't do anything.
     */
    if (!is_single() || !is_main_query()) {
        return $content;
    }

    // Make sure there is content to parse (and properly encode the HTML entities).
    $domDocument = new DOMDocument();
    $domContent = $domDocument->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES'));
    if (false === $domContent) {
        return $content;
    }

    $paragraphs = $domDocument->getElementsByTagName('p');
    if (0 === count($paragraphs)) {
        return $content;
    }

    // More to come...
}

Da qui, puoi fare diverse cose come aggiungere l’ID del post a un attributo personalizzato di ogni elemento del paragrafo. La funzione completa sarebbe quindi simile a questa:

<?php

namespace Acme;

use DOMDocument;

add_filter('the_content', __NAMESPACE__. 'updateParagraphElements');
/**
 * Updates the content by locating all of the `p` elements in the content,
 * then adds a class attribute of the post ID to them.
 *
 * The gist of the work is done in this function.
 *
 * @param string $content the post content
 *
 * @return string the updated post content with the aforemented markup.
 */
function updateParagraphElements($content) 
{
    /* If we're not on a single page or it's not the main query, 
     * we won't do anything.
     */
    if (!is_single() || !is_main_query()) {
        return $content;
    }

    // Make sure there is content to parse (and properly encode the HTML entities).
    $domDocument = new DOMDocument();
    $domContent = $domDocument->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES'));
    if (false === $domContent) {
        return $content;
    }

    $paragraphs = $domDocument->getElementsByTagName('p');
    if (0 === count($paragraphs)) {
        return $content;
    }

    // If so, iterate through the elements and add the post ID as a custom attribute.
    $updatedContent = '';
    foreach ($paragraphs as $paragraph) {
        $paragraph->setAttribute('data-id', get_the_ID());
    }

    return wp_kses_post($domDocument->saveHTML());
}

Naturalmente, ci sono anche altre cose che puoi fare. Una cosa è manipolare il markup prima di inviarlo al browser. Un’altra cosa, tuttavia, è aggiungere attributi ai dati se non esistono già.

Cioè, nessun gioco di parole intendeva – tranne forse solo una sorta di – contenuto per un altro post.

Fonte di registrazione: tommcfarlin.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More