web-dev-qa-db-fra.com

Définir le titre de l'article en fonction du premier élément h2 de la section de contenu

J'ai un éditeur frontal configuré pour permettre aux utilisateurs de créer des publications et je souhaite simplifier au maximum la création de publications avec le moins de champs possibles. Est-il possible de générer le titre de l'article en fonction du premier élément h2 qui apparaît dans le champ de contenu? Comment je ferais ça?

1
user304165

Si vous pouvez gérer cela du côté PHP, vous pourrez peut-être extraire les balises h2 du contenu à l'aide de l'expression régulière .

PHP VERSION

Tester le contenu

$content = "<h2>This is H2 Content</h2><p>This is p content</p>Random Content<h2>This is another H2 section</h2><b><h2>This the third H2 section</h2></b>";

Prenez n'importe quel texte à l'intérieur de H2s

preg_match_all('#<h2>(.*?)</h2>#', $content, $matches);

// Merge the first 2 matches

$potential_title = implode ( ' - ', array_slice($matches[0], 0, 2));

Si nous avons quelque chose ...

if( ! empty ( $potential_title ) ) {

Supprimer tout code HTML du contenu restant

    $cleaner_title = strip_tags( $potential_title );

Prépare la mise à jour du titre de l'article

    $my_post_updates = array(
        'ID'           => $post_id,
        'post_title'   => $cleaner_title, 
    );

    // Update the post into the database

    wp_update_post( $my_post_updates );
}

JS VERSION

La version Javascript est similaire, il vous suffira d'intercepter la soumission du formulaire, de saisir le contenu, d'analyser les résultats, puis de transmettre les données.

Cela alerte simplement le résultat de l'analyse du contenu du test.

// test content    
var content = "<h2>This is H2 Content</h2><p>This is PPP content</p>Random Content<h2>This is another H2 section</h2><b><h2>This the third H2 section</h2></b>";

// variables to store regEx results. 
var match, regex = /<h2>(.*?)<\/h2>/ig, matches = [];

// get all the matches and put in array
while (match = regex.exec(content)) { matches.Push( match[1] ); }

// if we have any...
if( matches.length ) {

   // pull the first 2 and join them together
   var title = matches.slice ( 0, 2 ).join ( ' - ' );

   // send this along with your form submission
   alert(title);
}
1
jgraup