5

我希望有人可以帮助我解决问题。我正在为我的一个朋友建立一个新闻网站。该网站开始合并,但我不知道如何为特色图片添加标题。我今天一直在网上寻找,有很多方法可以通过向 php 表中添加代码来做到这一点,但我不确定我在做什么。

我已经在 functions.php 代码中添加了这样的代码,但一切都是成对的。

我一直在祈祷,有人可以通过键入我的操作来帮助我。

预先感谢您的帮助。

亲切的问候

约翰

4

2 回答 2

10

首先,您需要在 functions.php 文件中删除以下代码:

function the_post_thumbnail_caption() {
  global $post;

  $thumbnail_id    = get_post_thumbnail_id($post->ID);
  $thumbnail_image = get_posts(array('p' => $thumbnail_id, 'post_type' => 'attachment'));

  if ($thumbnail_image && isset($thumbnail_image[0])) {
    echo '<span>'.$thumbnail_image[0]->post_excerpt.'</span>';
  }
}

将其粘贴在该文件中的结束 PHP 标记之前,如果没有结束 PHP 标记,请确保您粘贴的代码下方没有空行,因为这可能会导致问题。

然后,您希望在哪里显示标题,您需要使用以下命令调用它:

<?php the_post_thumbnail_caption(); ?>

如果您不确定将调用放在模板文件中的哪个位置,<?php the_post_thumbnail(); ?>则需要找到调用位置。只需在模板文件中查找该行,然后将函数调用放在它附近,即您希望显示标题的位置。该函数自动将标题包装在 span 标签中,因此您可以使用 CSS 定位它,但您也可以将函数调用包装在您想要的任何标签中。

因此,例如,如果您的模板文件使用此或非常类似的方式调用特色图像:

<?php 
    if ( has_post_thumbnail() ) {
        the_post_thumbnail();
} ?>

您想像这样添加标题调用:

<?php 
    if ( has_post_thumbnail() ) {
        the_post_thumbnail();
} ?>
<?php the_post_thumbnail_caption(); ?>

如果您需要任何其他说明,请告诉我。

于 2012-12-13T00:08:07.407 回答
0

我知道这是一个老问题,但我想提供其他人可能更喜欢的另一种解决方案,如果您希望在使用 WordPress 中已经可用的字段时处理已经可用的数据(更少的数据库调用)。

由于输出get_the_post_thumbnail()将整个 img 标记作为字符串返回,其中 alt 标记从标题字段中预先填充,因此您可以使用 xml 解析器或正则表达式简单地提取图像标记的 alt 标记。

我这样做了:

    <?php 
    if ( $featured = get_the_post_thumbnail( get_the_ID() ) ):

        echo $featured; 
        preg_match('/alt="(.*)"/i', $featured, $caption);

        if ($caption) {
            echo wpautop(array_pop($caption));
        }
    endif;
    ?>

如果您希望它在最初接受的答案之类的函数中,则将 img 标签直接传递给您的函数:

    function get_the_post_thumbnail_caption($img_tag) {
        preg_match('/alt="(.*)"/i', $img_tag, $caption);
        return array_pop($caption);
    }

在模板中:

    $img = get_the_post_thumbnail( get_the_ID() ); // or any id
    echo wpautop( get_the_post_thumbnail_caption( $img ) );

请注意,如果您填充 'alt text' 字段,它将在输出 img 标签时覆盖标题字段数据。如有必要,您可以使用过滤器覆盖该行为。

于 2013-10-17T18:51:44.990 回答