web-dev-qa-db-ja.com

ページにタグで投稿を表示する

私は、通常のコンテンツを表示する高度なWordPressページと、Xタグからの最新の投稿を表示する同じページ上の2番目のセクションを作成しようとしています。たとえば、「猫」についてのページが作成され、写真、コンテンツなどが表示されます。その後、「猫」とタグ付けされた最後のX投稿を表示します。プラグインを使わずに、そして各ページにカスタムページテンプレートを作成しなくても可能ですか。

おそらくそれはカスタムフィールド機能と複数のループで実行可能です。例えば。値が "cats"のカスタムフィールドからX件の投稿を取得します。私はしばらくの間それと苦労してきました、すべての個々のページのためにテンプレートを作成することを含まない解決策を見つけることができないように思えることができません。

ありがとうございます。

3
Bill

これで仕事ができます。現在のページのタイトルでタグ付けされている投稿をチェックします。ページテンプレートでif (have_posts()):を使う必要はありません:テンプレートが呼ばれるならば、それはポストがあるからでしょう:)

<div class="page-loop">

    <?php
      while (have_posts()) : the_post();
        $page_title = strtolower(get_the_title());
        the_title('<h1>','</h1>');
      ?>
        <p><?php the_content(); ?><p>
    <?php endwhile;?>

</div>

<!-- Get the most recent post that has been tagged with the page title -->
<div class="related-posts">

    <?php
      $args = array(
        'tag' => $page_title,
        'posts_per_page' => 1,
      );
      $query = new WP_Query($args);
      if ($query->have_posts()) :
        while ($query->have_posts()) : $query->the_post();
          the_title('<h1>','</h1>');
        ?>
        <p><?php the_content(); ?><p>
    <?php endwhile; else: ?>
      <p>Sorry, no posts with this tag!</p>
    <?php endif; wp_reset_query(); ?>

</div>

(タイトルを使用する代わりに)カスタムメタを使用してページに「タグ」を追加する場合は、カスタムメタボックスをページに追加することもできます。 functions.phpに次のコードを追加してください(nb:これによりすべてのページにメタボックスが追加されます)

/** register the meta box */
function my_theme_add_meta_boxes() {
    global $post;
    add_meta_box(
        'my-theme-meta',
        'Choose a tag',
        'my_theme_print_page_meta',
        'page',
        'normal',
        'high'
    );
}
add_action('add_meta_boxes', 'my_theme_add_meta_boxes');
/** Add extra meta to the page */
function my_theme_print_page_meta() {
    global $post;
    $page_tags = get_post_meta($post->ID, '_page-tags', true);
    ?>
    <label for="page-tags">Add a 'tag'</label>
    <input type="text" class="page-tags" name="page-tags" value="<?php echo esc_attr($page_tags); ?>" />
    <?php
}
/** Save post meta */
function my_theme_save_custom_meta() {
    global $post;

    // Stops WP from clearing post meta when autosaving
    if( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
      return $post->ID;
    }
    if (isset($_POST['page-tags'])) {
        $clean = sanitize_text_field($_POST['page-tags']);
        update_post_meta($post->ID, '_page-tags', $clean);
    }

}
add_action('save_post', 'my_theme_save_custom_meta');

それであなたのpage.phpコードはこのようになるでしょう:

<div class="page-loop">

    <?php
      while (have_posts()) : the_post();
        $page_tags = get_post_meta($post->ID, '_page-tags', true);
        the_title('<h1>','</h1>');
      ?>
        <p><?php the_content(); ?><p>
    <?php endwhile;?>

</div>

<?php if ($page_tags): ?>

<!-- Get the most recent post that has been tagged with the page title -->
<div class="related-posts">

    <?php
      $args = array(
        'tag' => $page_tags,
        'posts_per_page' => 1,
      );
      $query = new WP_Query($args);
      if ($query->have_posts()) :
        while ($query->have_posts()) : $query->the_post();
          the_title('<h1>','</h1>');
        ?>
        <p><?php the_content(); ?><p>
    <?php endwhile; else: ?>
      <p>Sorry, no posts with this tag!</p>
    <?php endif; wp_reset_query(); ?>

</div>

<?php endif; // There are 'page tags' ?>
4
Richard Sweeney

ページの後半部分でWP_Queryを実行します。

<!-- First part of your page!-->
<div class="firstcontent">

    <?php if ( have_posts() ) : while ( have_posts() ) : the_post();?>
        <p><?php the_title(); ?><p>
        <p><?php the_content(); ?><p>
    <?php endwhile; endif;?>

</div>

<!-- And now you call the WP_Query() !-->
<div class="secondcontent">

    <!-- get the main query !-->
    <?php $wp_query = new WP_Query(array(
        'post_type' => 'post'
    ));?>

    <!-- and you can use it as above !-->
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post();?>
        <p><?php the_title(); ?><p>
        <p><?php the_content(); ?><p>
    <?php endwhile; endif;?>

</div>

私は現在WordPressのテーマで作業しています、そして私は実際にこのようなことをしているので、それはうまくいきます!

2
Zaidar

ループの使い方についてはすでに回答がありますので、 wpについては最近追加しません。 または 分類パラメータ:

しかし、あなたのコードを Widget でラップすることを考えた方が良いかもしれません。

0
jgraup