Display posts by tag on page

时间:2012-07-06 作者:Bill

我正在尝试创建一个高级WordPress页面,显示常规内容,并在同一页面上添加第二个部分,显示来自X标签的最新帖子。例如,创建了一个关于“猫”的页面,其中包含图片、内容等。之后,我想显示最后X篇标记为“猫”的帖子。不使用插件,也不为每个页面创建自定义页面模板,这是可能的吗?

也许使用自定义字段功能和多个循环是可行的。E、 g.从值为“cats”的自定义字段中获取X数量的帖子。我已经挣扎了一段时间了,似乎找不到一个不涉及为每个页面创建模板的解决方案。

谢谢

3 个回复
SO网友:Richard Sweeney

这应该可以完成工作。它将检查是否有贴有当前页面标题的帖子。没有必要使用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>
如果您希望使用自定义元将“标记”添加到页面中(而不仅仅是使用标题),您可以向页面中添加自定义元框,如下所示。将以下代码添加到函数中。php(注意:这将向所有页面添加元框)

/** 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\');
然后是您的页面。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\' ?>

SO网友:JeanDavidDaviet

在页面的第二部分执行WP\\U查询:

<!-- 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上处理一个主题,实际上我正在做这件事,所以它很有效!

SO网友:jgraup

上面已经有了关于如何使用循环的答案,所以我不会再添加更多关于wp get recent postsTaxonomy Parameters.

但您可能需要考虑将代码包装在Widget 这将使添加到现有模板更加容易。

结束

相关推荐

如何使用Pre_Get_Posts来定位默认的最近帖子和最近评论小部件?

我在函数中添加了以下内容。php:add_action(\'pre_get_posts\', \'keyl_get_emp_posts\'); function keyl_get_emp_posts($query) { if ($query->is_main_query()) $query->set(\'post_type\', \'employee\'); } 到目前为止,它有效地过滤掉了搜索结果。不过,默认的小部件“最近的帖