如何在自定义POST类型的主循环中创建IF语句

时间:2019-07-06 作者:ElCodes

首先,这是我的第一个WP项目,我在学习的过程中。。。我知道这可能是一件很容易实现的事情,但由于某种原因,我很难让它发挥作用。。。所以,如果这是一个noob问题,我很抱歉。。。

但我正在创建一个社交网站,它有类似于推特的不同类型的帖子。我有5种自定义帖子类型,用于评论/状态更新/“推特”、图片帖子、网络链接帖子、博客帖子和视频帖子。

我创建了single-[帖子类型]。php文件,但这显然只是改变了它们在单个页面上的输出方式,并没有改变主循环中的HTML标记。

所以我一直在尝试在主循环中使用其他一些if语句。。。所以“If post type=“comment”。。。然后输出此HTML“.”否则,如果post type=“link”,则使用此HTML“。。。

我试过几种方法。。。这是最近的一次。这是我当前的主要WP循环代码;

<?php if ( $query2->have_posts() ) : ?>
    <?php while ( $query2->have_posts() ) : $query2->the_post();?> 
           <?php $postType = get_post_type_object(get_post_type()); ?>
            <?php if (is_singular( \'comment\' )) : ?>
                <h2> Custom Post Type Here </h2>

                <?php else : ?>
                        <article class ="post">
                            <a href="<?php the_permalink(); ?>">
                                <h3><?php the_title() ?></h3>
                                <a href="<?php the_permalink(); ?>">
                                <p class="meta">posted a blog on 24th May 2019 at 22:17</p>
                                <p><?php the_content(); ?></p>
                            </article>
                            </a>
                            <hr>
<?php endif; ?>
<?php endwhile; ?>
<?php else : ?>
<?php echo "Error: 404"; ?>
<?php endif ?>
请有更多经验的人告诉我正确的方法好吗?

----编辑-----

破解了它。需要访问WP\\u Post\\u类型对象的“name”属性。所有需要的人都可以使用完整的代码。

<?php if ( $query2->have_posts() ) : ?>
    <?php while ( $query2->have_posts() ) : $query2->the_post();?> 
           <?php $postType = get_post_type_object(get_post_type()); ?>
            <?php if ($postType->name == \'al-comment\' ) : ?>
            <article class = "comment">
                <h2> Comment type </h2><br/>
            </article>
            <?php elseif ($postType->name == \'al-blog\' ) : ?>
            <article class = "blog">
                <h2> Blog type </h2><br/>
            </article>
            <?php elseif ($postType->name == \'al-link\' ) : ?>
            <article class = "link">
                <h2> Link type </h2><br/>
            </article>
            <?php elseif ($postType->name == \'al-ytvid\' ) : ?>
            <article class = "ytvid">
                <h2> YouTube Video type </h2><br/>
            </article>

                <?php else : ?>
                     Standard post type <br/>
<?php endif; ?> 
<?php endwhile; ?>
<?php else : ?>
<?php echo "Error: 404"; ?>
<?php endif ?>
<?php wp_reset_postdata(); ?>

1 个回复
SO网友:MikeNGarrett

你的想法是对的。

您可以开始将其划分为单独的模板,以防止重复您自己的操作或有多个模板执行相同的操作。

您应该使用get_template_part() 根据需要拉入不同的模板。这样,您就可以进一步扩展模板,而无需WordPress指定应该如何操作。

在您的情况下,您可能有一个通用循环的模板,该模板在帖子列表上下文中为单个项目调用模板,该上下文为每个不同类型的项目(自定义帖子类型)调用模板。

相关推荐

Get category url in loop

我需要获取类别url,以便将其放入元代码段中。现在,span内的输出是带有url的标记。我只需要获取不带标记的url,并将其放入$cat\\u display中。我尝试使用2个选项,但会看到一个错误:注意:尝试获取非对象的属性// Get post category info $category = get_the_category(); if(!empty($category)) { // Get last category post is in