尝试直接通过此函数的参数从函数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;">
</td>
) no-repeat center center;background-size: cover;">
在我的情况下,有必要使用preg_match_all?
或者有人可以告诉我如何在image.php中使用SRC上一张和下一张图片?
答案 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
,然后您就可以获得有关附件的任何信息。