可以单独处理帖子的特定部分吗?

时间:2015-04-08 作者:Stephen Lead

我对WordPress做了一些修改,但我还不是专家,所以如果这是一个重复的问题,请提前道歉。

我已经基于Bootstrap构建了一个简单的WordPress主题,我可以使用the_content(), 使用填充侧栏时get_sidebar().

我的问题是,是否可以标记一篇文章的特定部分,并让该部分的处理方式与其他部分不同the_content(). 下面是一个示例:

enter image description here

下面是一些伪代码:

<?php get_header(); ?>

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <div class="row">
        <div class="col-md-12">
            <!--tag one image within the post, to appear across all 12 columns-->
        </div>
    </div>
    <h1><?php the_title(); ?></h1>
    <div class="row">
        <div class="col-md-8">
            <!--the rest of the post, minus the tagged image, goes here-->
            <?php the_content(); ?>
        </div>
        <div class="col-md-4">
            <?php get_sidebar(); ?>
        </div>
    </div>

<?php endwhile; else: ?>
    <p><?php _e(\'Sorry, no posts matched your criteria.\'); ?></p>
<?php endif; ?>

<?php get_footer(); ?>
在这种情况下,我想标记(或以其他方式识别)帖子中的一幅图像,并将其显示在col-md-12分区中,而帖子的其余部分则显示在col-md-8分区中。

我读过the_excerpt() 但我认为这在这里行不通。

2 个回复
SO网友:Pieter Goosen

你可以利用featured images 正如@gmazzap在评论中所建议的那样。此特色图片不会包含在帖子内容中。然而,如果你的图片已经包含在帖子内容中,那么你需要将帖子内容分为两部分,正如你在问题中所说的那样。

我有两个函数,一个返回内容中的所有图像(或任何html标记内容),另一个返回没有所需标记/图像的文本。这两个函数都使用DOMDocument

第一个函数get_content_without_tag() 返回已从图像中删除的内容。有两个参数

  • $html -> 带有要剥离的图像的文本,在这种情况下,使用apply_filters( \'the_content\', get_the_content() ) 使用帖子内容

  • $tag -> 要删除的标记的名称,在本例中为“a”a 标记保存图像

    以下是函数

    function get_content_without_tag( $html, $tag )
    {
        $dom = new DOMDocument;
        $dom->loadHTML( $html );
    
        $dom_x_path = new DOMXPath( $dom );
        while ($node = $dom_x_path->query( \'//\' . $tag )->item(0)) {
            $node->parentNode->removeChild( $node );
        }
        return $dom->saveHTML();
    }
    
    然后您将使用此the_content() 如果只需要显示文本,请删除完整的<a/> 标签中的图像如下所示

    echo get_content_without_tag( apply_filters( \'the_content\', get_the_content() ), \'a\' )
    
    第二个功能,get_tag_without_text() 返回所需标记(在您的示例中为图像)之间的内容。参数与第一个函数完全相同。下面是函数

    function get_tag_without_text( $html, $tag )
    {
        $document = new DOMDocument();
        $document->loadHTML( $html );  
    
        $tags = [];
        $elements = $document->getElementsByTagName( $tag );
        if ( $elements ) {
            foreach ( $elements as $element ) {
                $tags[] = $document->saveHtml($element);
            }   
        }   
        return $tags;
    }
    
    此函数返回您应该使用的图像数组a 因此,要显示第一幅图像,请使用以下功能:

    $image = get_tag_without_text( apply_filters( \'the_content\', get_the_content() ), \'a\' );
    echo $image[0];
    
    最后一个提示是,将调用移到循环外的侧栏。它应该在页脚调用的正上方

SO网友:dynamicad

您可以尝试使用advanced custom fields plugin. 您可以将图像字段添加到内容区域下的页面中,然后使用下面的field\\u name是您创建的字段的名称,将该自定义字段输出到页面上任何需要的位置。然后,您只需将代码包装在您想要的CSS中即可。

<p><?php the_field(\'field_name\'); ?></p>
您也可以只考虑使用特色图片。

结束

相关推荐