【问题标题】:Not sure where to put this code for my custom post type?不确定将此代码放在我的自定义帖子类型的哪里?
【发布时间】:2014-07-14 13:56:32
【问题描述】:

我有一个自定义帖子类型(称为“折扣”),我想在第 23 个主题中显示它。我创建了一个名为 discount-page.php 的自定义页面文件来为此帖子类型创建我自己的模板。但是,我不确定我需要在哪里放置 wp_query 代码。这是默认 page.php 的外观,并添加了新模板名称:

<div id="primary" class="content-area">
    <div id="content" class="site-content" role="main">

        <?php /* The loop */ ?>
        <?php while ( have_posts() ) : the_post(); ?>


            <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                <header class="entry-header">
                    <?php if ( has_post_thumbnail() && ! post_password_required() ) : ?>
                    <div class="entry-thumbnail">
                        <?php the_post_thumbnail(); ?>
                    </div>
                    <?php endif; ?>

                    <h1 class="entry-title"><?php the_title(); ?></h1>
                </header><!-- .entry-header -->

                <div class="entry-content">
                    <?php the_content(); ?>
                    <?php wp_link_pages( array( 'before' => '<div class="page-links"><span class="page-links-title">' . __( 'Pages:', 'twentythirteen' ) . '</span>', 'after' => '</div>', 'link_before' => '<span>', 'link_after' => '</span>' ) ); ?>
                </div><!-- .entry-content -->

                <footer class="entry-meta">
                    <?php edit_post_link( __( 'Edit', 'twentythirteen' ), '<span class="edit-link">', '</span>' ); ?>
                </footer><!-- .entry-meta -->
            </article><!-- #post -->

            <?php comments_template(); ?>
        <?php endwhile; ?>

    </div><!-- #content -->
</div><!-- #primary -->

现在,我很确定为了让我的帖子真正显示其内容,我需要将此代码块添加到 discount-page.php:

<?php
 $query = new WP_Query( array('post_type' => 'discount', 'posts_per_page' => 5 ) );
 while ( $query->have_posts() ) : $query->the_post(); ?>
// Your code e.g. "the_content();"
<?php endif; wp_reset_postdata(); ?>
<?php endwhile; ?>

我只是不知道在哪里添加它?无论我在哪里添加它似乎都会破坏页面。

【问题讨论】:

  • 您需要将它放在主循环之外,无论是之前还是之后。所以在此之前:&lt;?php /* The loop */ ?&gt; 或在此之后:&lt;?php endwhile; ?&gt;
  • 另外,将 endif; 从这一行 &lt;?php endif; wp_reset_postdata(); ?&gt;endwhile; 并删除自定义循环中的最后一行,即:&lt;?php endwhile; ?&gt;
  • 太棒了,谢谢。所以这就是我最终得到的代码:pastebin.com/VNnukriV 但它似乎破坏了我的页面。知道我做错了什么吗?
  • 您的 pastebin 代码不正确,请给我几分钟时间整理一下,我会再次发布。
  • 除了自定义循环之外,您还希望拥有主循环,还是只有自定义循环?

标签: php wordpress


【解决方案1】:

您只需更改几行代码即可使其正常工作。

<div id="primary" class="content-area">
    <div id="content" class="site-content" role="main">

        <?php /* The loop */ ?>
        <?php 
            $query = new WP_Query( array('post_type' => 'discount', 'posts_per_page' => 5 ) );
            while ( $query->have_posts() ) : $query->the_post(); ?> ?>


            <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                <header class="entry-header">
                    <?php if ( has_post_thumbnail() && ! post_password_required() ) : ?>
                    <div class="entry-thumbnail">
                        <?php the_post_thumbnail(); ?>
                    </div>
                    <?php endif; ?>

                    <h1 class="entry-title"><?php the_title(); ?></h1>
                </header><!-- .entry-header -->

                <div class="entry-content">
                    <?php the_content(); ?>
                    <?php wp_link_pages( array( 'before' => '<div class="page-links"><span class="page-links-title">' . __( 'Pages:', 'twentythirteen' ) . '</span>', 'after' => '</div>', 'link_before' => '<span>', 'link_after' => '</span>' ) ); ?>
                </div><!-- .entry-content -->

                <footer class="entry-meta">
                    <?php edit_post_link( __( 'Edit', 'twentythirteen' ), '<span class="edit-link">', '</span>' ); ?>
                </footer><!-- .entry-meta -->
            </article><!-- #post -->

            <?php comments_template(); ?>
        <?php endwhile; wp_reset_postdata(); ?>

    </div><!-- #content -->
</div><!-- #primary -->

如果您想要它的超级简单版本,请删除其他所有内容。试试这个:

<div id="primary" class="content-area">
    <div id="content" class="site-content" role="main">
        <?php 
            $query = new WP_Query( array('post_type' => 'discount', 'posts_per_page' => 5 ) );
            while ( $query->have_posts() ) : $query->the_post(); 
        ?>
            <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                <div class="entry-content">
                    <?php the_content(); ?>
                </div>
            </article>
        <?php endwhile; wp_reset_postdata(); ?>
    </div>
</div>

【讨论】:

  • 如果他不需要页面上的主循环来显示页面内容,这将起作用。只是想澄清一下,您正在用自定义帖子类型循环替换他的主循环。
  • 谢谢!第一个代码块显示了我的自定义帖子,但它没有链接到它们。知道如何添加此功能吗?
  • 它应该是 single-discount.php(我不相信 page-discount.php 会起作用或者你以前的方式)。
  • 除非他想要此帖子类型的单个帖子的自定义模板,否则不会。如果您只想将帖子标题链接到帖子,请将&lt;h1 class="entry-title"&gt;&lt;?php the_title(); ?&gt;&lt;/h1&gt; 更改为&lt;h1 class="entry-title"&gt;&lt;a href="&lt;?php the_permalink(); ?&gt;"&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/h1&gt;
  • 作为一个帖子类型,您需要将该代码放在一个名为archive-discount.php 的文件中。您可以使用 functions.php 文件中的函数覆盖它,但我可能会进一步搞砸
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多