web-dev-qa-db-fra.com

Obtenir un contenu div d'un message dans Wordpress?

Comment puis-je récupérer un contenu div à partir d'un article?

Utiliser the_content() permet d'extraire toutes les données, mais au lieu de cela, j'ai besoin d'un contenu spécifique provenant uniquement de div. Jusqu'ici, tout ce que je pouvais faire était d'obtenir le lien de l'article en tant que contenu div.

Voici ce que j'essaie de faire:

<?php while (have_posts()) : the_post(); ?>

<li style = "text-align: center; float : left;">

  <a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php echo get_the_post_thumbnail($id); ?></a>

  <div class="title">
    <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a>
  </div>

  <div id = "result">`

    <?php echo "<script> 
      $('#result').load( '".the_permalink()." .ps_post_description' );
    </script>"; ?>

  </div>

</li>

<?php endwhile; ?>

ps_post_description est la classe de la div pour laquelle j'ai besoin du contenu.

2
puneet

En utilisant DOMDocument et DOMXPath vous pouvez essayer ceci.

<?php while (have_posts()) : the_post();

ob_start();  // run the_content() through the Output Buffer
the_content();
$html = ob_get_clean(); // Store the formatted HTML
$content = new DomDocument(); // Create a new DOMDocument Object to work with our HTML
$content->loadHTML( $html ); // Load the $html into the new object
$Finder = new DomXPath( $content );  // Create a new DOMXPath object with our $content object that we will evaluate
$classname = 'ps_post_description'; // The class we are looking for

$item_list = $Finder->query("//*[contains(@class, '$classname')]"); // Evaluates our content and will return an object containing the number of items matching our query
?>

<li style = "text-align: center; float : left;">

  <a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php echo get_the_post_thumbnail($id); ?></a>

  <div class="title">
    <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a>
  </div>

  <div id = "result">`
    <?php 
    // echo the value of each item found
    // You might want to format or wrap your $value according to your specification if necessary
    for( $i = 0; $i < $item_list->length; $i++ ){
    $value = $item_list->item( $i )->nodeValue;

      echo $value;

      // if you want the text to be a link to the post, you could use this instead 
      // echo '<a href="' . get_the_permalink() . '">' . $value . '</a>';

    } ?>
  </div>

</li>

<?php endwhile; ?>

UPDATE

Utilisation de Output Buffering pour développer des codes courts avant d'essayer de charger le code HTML dans DOMDocument

Notez que les deux solutions (avant et après la modification) fonctionnent, donc les erreurs/avertissements doivent provenir d’ailleurs dans votre configuration.

2
bynicolas

Vous devez extraire tout le contenu, puis le réduire à cette div spécifique. Mais pourquoi tu veux faire ça? C'est inutile et fastidieux - travail supplémentaire à mettre dans la base de données, travail supplémentaire à extraire. Avez-vous envisagé d'ajouter un champ personnalisé à utiliser uniquement pour ce contenu? (L'extrait ressemble à ce que vous recherchez, il est déjà intégré et tout ce que vous auriez à faire pour l'utiliser est <?php the_excerpt(); ?>)

1
Lucian Davidescu