web-dev-qa-db-ja.com

ワードプレスで投稿のdivコンテンツを取得する?

投稿からdivコンテンツを取得する方法を教えてください。

the_content()を使用するとすべてのデータを取得できますが、その代わりにdivからの特定のコンテンツのみが必要です。これまでのところ、投稿のリンクをdivの内容として取得することしかできませんでした。

これが私がやろうとしていたことです:

<?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は私がコンテンツを必要としているdivのクラスです。

2
puneet

DOMDocument および DOMXPath を使用すると、これを試すことができます。

<?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 _

DOMDocumentにHTMLを読み込もうとする前に、 出力バッファリング を使用してショートコードを拡張しました。

両方の解決策(編集の前後)はうまくいっているので、エラー/警告はあなたの設定の他の場所から来るべきであることに注意してください。

2
bynicolas

あなたはすべてのコンテンツを取り出して、それからその特定のdivにそれをトリミングしなければならないでしょう。しかし、なぜそれをしたいのですか?それは煩わしくて面倒です - それをデータベースに入れるための余分な仕事、それを出すための余分な仕事。そのコンテンツにだけ使用するカスタムフィールドを追加することを検討しましたか。 (抜粋はあなたが探しているもののように聞こえます、それはすでに組み込まれていて、あなたがそれを使うためにしなければならないのは<?php the_excerpt(); ?>だけです)

1