如何在image.php中使用SRC上一张和下一张图像?

时间:2015-03-29 01:14:29

标签: php wordpress

尝试直接通过此函数的参数从函数previous_image_link ()中删除图像,我这样做是不可能的。因此,尝试简单地提取SRC:

<td style="background: url(

<?php

    $html = previous_image_link('full');
    preg_match_all('/<img [^>]*src=["|\']([^"|\']+)/i', $html, $matches);
    foreach ($matches[1] as $key=>$value) {
        echo $value;
    }
?>

) no-repeat center center; background-size: cover;">

但是,而不是预期的

<td style="background: url(/wp-content/uploads/2015/03/tiaurus.info_20150323125918.jpg") no-repeat center center; background-size: cover;">

获得

<td height="3166" class="attachment-full" alt="img_alt_text" src="/wp-content/blablabla/20150323125918.jpg" 8176"="">) no-repeat center center;background-size: cover;"&gt;
            </td>
) no-repeat center center;background-size: cover;">

在我的情况下,有必要使用preg_match_all?

或者有人可以告诉我如何在image.php中使用SRC上一张和下一张图片?

2 个答案:

答案 0 :(得分:0)

您可以使用PHP函数pre_match并消除foreach循环。

preg_match('/ src=["\']([^\s]+)["\']/', $html, $matches);
echo $matches[1];

由于您的$html字符串只能检索一个src值,因此preg_match就足够了。 preg_match_all专为多项匹配而设计。

此外,由于src=在字符串中是唯一的,我们可以将模式缩小到以src=开头的内容,并用双引号或单引号括起来。 ["\']是一个字符类,它将匹配限制为一个双引号或单引号的字符。 (单引号是转义的,因为我使用单引号来分隔正则表达式字符串。)

括号()捕获一个值并将其添加到$matches数组中。

[^]是一个否定字符类,换句话说,不匹配此处列出的任何字符。 +匹配前一个字符中的一个或多个。所以[^\s]+只是说,匹配一个或多个不是空格字符的字符。

假设:

$html = '<a href="/33279/retro-kartinyi-iz-skotcha-max-zorn"><img width="1600" height="900" class="attachment-full" style="width: 516px; height: 290px;" alt="Max Zorn" src="/wp-content/uploads/2015/03/tiaurus.info_20150323125854.jpg"></a>';

echo $matches[1];返回:

/wp-content/uploads/2015/03/tiaurus.info_20150323125854.jpg

答案 1 :(得分:0)

我认为您应该尝试对previous_image_link函数进行反向工程以找到更直接的方法,而不是尝试使用正则表达式来提取URL。

previous_image_link本质上是adjacent_image_link的包装器。一旦你看到如何获取相邻图像,编写一个获取图像src而不是格式化链接的函数非常容易:

function adjacent_image_src($prev = true) {
    $post = get_post();
    $attachments = array_values( get_children( array( 'post_parent' => $post->post_parent, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC', 'orderby' => 'menu_order ID' ) ) );

    foreach ( $attachments as $k => $attachment ) {
        if ( $attachment->ID == $post->ID ) {
            break;
        }
    }

    $attachment_id = false;
    $src = false;

    if ( $attachments ) {
        $k = $prev ? $k - 1 : $k + 1;

        if ( isset( $attachments[ $k ] ) ) {
            $attachment_id = $attachments[ $k ]->ID;
            $src = wp_get_attachment_image_src( $attachment_id );
        }
    }

    return $src;
}

您也可以返回$attachment_id,然后您就可以获得有关附件的任何信息。