Conditional for Post Format

时间:2013-10-03 作者:lucasmx

我想根据帖子类型在每篇帖子的顶部(单页)显示特定内容。

如果是normal, 展示一些东西,如果是gallery, 显示另一个。

目前代码如下:

<?php
    if  (has_post_format( \'post-format-normal\' , $post_id )) {
        <div class="post-image-section section" style="background-image: url(<?php echo $single_post_image_url ?>);">
            <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title(); ?>">
            <?php the_post_thumbnail(\'single-post-image\'); ?>
            <?php if ( !empty(get_post(get_post_thumbnail_id())->post_excerpt) ) : ?>
                <div class="flex-caption-container">
                    <p class="flex-caption"><?php echo get_post(get_post_thumbnail_id())->post_excerpt; ?></p>
                </div>
            <?php endif; ?>
            </a>
        </div>
    } elseif ( has_post_format( \'post-format-gallery\' , $post_id )) {
        <?php flexslider(\'index-post-image\'); ?>            
    }
?>
但它不起作用,看起来代码上有一个键入错误。。。如果帖子类型是gallery, 显示flexslidernormal, 显示post\\u缩略图。。。

如何做到这一点?

3 个回复
SO网友:Chip Bennett

没有“默认”的帖子格式类型,但在核心中,没有指定帖子格式的帖子通常被称为标准帖子。那么,您的第一个条件将返回false 使用post-format-normal 因为没有这样的post格式,但仍然会使用返回falsepost-format-standard.

您可以反转条件,然后先检查gallery post格式。请注意,您可以使用\'gallery\' == get_post_format()has_post_format( \'post-format-gallery\' ). (我个人认为get_post_format() 更直观一点。)

在任何情况下,您都可以像这样反转条件:

if ( has_post_format( \'post-format-gallery\' ) ) {
    flexslider(\'index-post-image\');       
} else {
    // Fallback output here
}
请注意,代码中也存在语法错误,例如嵌套的PHP标记。

SO网友:gmazzap

首先你的问题是$postid 变量,您在哪里设置它?

代码应放在the_post();.

之后再考虑一下帖子的格式are just taxonomies, 所以即使你可以使用,has_post_format() 如果您想为每种格式显示一个不同的内容,最好使用justget_the_terms(在@ChipBennett评论后编辑)get_post_format 使用switch, 但这只是一种观点。

您还必须考虑到(如上面链接的答案所述)没有“正常”的帖子格式:帖子格式正常意味着没有帖子格式。

如果您有一些html/php混合内容,那么在条件语句中正确地编写代码可能会比较困难,可读性较差,那么为什么不创建一些模板部分并使用它们呢?

类似于:

if ( have_posts() ) : while ( have_posts() ) : the_post();

  get_template_part( \'before-single\', get_post_format() );

endwhile; endif;
之后,您可以在主题(或子主题)文件夹中创建文件:

单身之前。php在单帖格式聊天之前。php之前,请将单贴格式放在一边。php在单个post格式链接之前。php在单帖格式聊天之前。php在单post格式音频之前。php在单post格式视频之前。php在单post格式图像之前。php在单帖格式引用之前。php在单post格式状态之前。当然,你是not 需要创建所有这些文件,当当前post格式的文件不存在时,文件before-single.php 将使用。

在这些文件中,你可以自由使用所有你想要的html和php代码。。。

SO网友:lucasmx

好的,伙计们,谢谢你们的帮助,因为我说过问题是PHP语法导致了渲染错误。当我把PHP和HTML内容混合在一起时,我不知道如何正确地编写。

以下是我找到的解决方案:

<?php  if( has_post_format( \'gallery\' )) {  
flexslider(\'index-post-image\'); 
}  else {?>  
<div class="post-image-section section" style="background-image: url(<?php echo $single_post_image_url ?>);">
            <a href="$the_permalink(); ?>" rel="bookmark" title="<?php the_title(); ?>">
            <?php the_post_thumbnail(\'single-post-image\') ?>
            <?php if ( !empty(get_post(get_post_thumbnail_id())->post_excerpt) ) : ?>
                <div class="flex-caption-container">
                    <p class="flex-caption"><?php echo get_post(get_post_thumbnail_id())->post_excerpt; ?></p>
                </div>
            <?php endif; ?>
            </a>
        </div>
<?php  }?> 

结束

相关推荐

如何使用php从外部访问WordPress数据库中的数据

我想与iOS应用程序共享特定wordpress数据库表中的数据。客户端希望通过wordpress表单插件输入数据,这些插件在wp数据库中创建自己的表。我所研究的插件本身没有API,wordpress REST API的示例都使用AJAX,我不熟悉AJAX和/或只能访问wordpress帖子或用户数据中的信息。有没有一种方法可以通过php做到这一点,而不需要直接访问数据库?我担心数据库结构的变化和更新可能会破坏应用程序。