如何在循环之外获取IS_HOME()的摘录不起作用

时间:2016-02-25 作者:DᴀʀᴛʜVᴀᴅᴇʀ

我想把我的摘录带到循环之外,我学会了如何处理除博客页面以外的所有内容。在研究了这个主题之后,我能够制作出两个Q&;作为:

自从这两个问题;几岁时,我想确保该方法没有任何修改或添加,因此通过进一步的研究,我能够遇到:

  • How to Generate a Post Excerpt Outside the Loop

    <?php if ( is_front_page() ) : ?>
        <meta name="twitter:description" property="og:description" itemprop="description" content="<?php echo wp_kses_post( wp_trim_words( $post->post_content, 30 ) ); ?>" />
    <?php elseif ( is_home() ) : ?>    
        <meta property="og:description" content="<?php echo wp_kses_post( wp_trim_words( $post->post_excerpt, 20 ) ); ?>" />
    <?php elseif ( is_single() || is_page() ) :
        if ( empty( $post->post_excerpt ) ) : ?>
            <meta property="og:description" content="<?php echo wp_kses_post( wp_trim_words( $post->post_content, 20 ) ); ?>" />
        <?php else : ?>
            <meta property="og:description" content="<?php echo wp_kses_post( $post->post_excerpt ); ?>"  />
        <?php endif; ?>
    <?php endif; ?>
    
    然而,当我打电话时is_home() 它生成一个空白摘录:<meta property="og:description" content="" />. 为什么我无法获取博客页面的摘录?

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

这个$post global始终在循环之前保留主查询对象中的第一个帖子(如果在此之前没有任何内容打断它)。在单一页面和静态首页上,它将始终与查询的对象相同。对于所有档案,主页和博客页,$post 担任$posts 循环前的数组和$posts 循环后的数组。

如果需要以博客页面上的实际页面对象为目标,则需要使用查询的对象,而不是$post 全球的查询的对象将保存用作设置为博客页面的页面的页面对象。正如我之前所说,$post 将在循环中担任第一个职位。

您还需要记住$post global非常不可靠,因为任何东西都可以改变它。为了获得更高的可靠性,要访问单一页面(单篇文章页面、真实页面和静态首页)或博客页面上的页面对象,请使用get_queried_object(). 如果你想要更高的可靠性,你可以使用$GLOBALS[\'wp_the_query\']->get_queried_object(). 我最近才知道an answer on this very subject

相关推荐

Ordering terms whilst in loop

我有一个页面模板,显示所有;“发布”;在两个自定义分类中,帖子显示在一个表中$type = $_GET[\'type\']; $category = $_GET[\'category\']; args = array( \'post-type\' => \'literature\', \'posts_per_page\' => -1, \'tax_query\' => array(