Я хочу получить первую ссылку моего сообщения WordPress в пользовательском поле сообщения. Я узнаю, что кто-то был в такой же нужде, как и я, и получил очень хороший ответ:
function my_save_post( $post_id, $post ) {
if ( wp_is_post_revision( $post_id ) )
return;
$matches = array();
preg_match_all( '/href\s*=\s*[\"\']([^\"\']+)/', $post->post_content, $matches );
$first_link = false;
if ( ! empty( $matches[1][0] ) )
$first_link = $matches[1][0];
update_post_meta( $post_id, 'link', esc_url_raw( $first_link ) );
}
Моя проблема в том, что я хотел бы, чтобы preg_match_all имел еще одно условие, я хотел бы получить только первую ссылку, содержащую определенную строку: bouture.com, я думаю, что это возможно, потому что это уже «строковое условие» с href, но я не знаю, как это сделать.
Вот несколько примеров ссылок, которые я хотел бы получить с помощью выражения REGEX:
https://www.bouture.com/example
https://www.bouture.com/category/post-title/
Если у вас есть идеи, это было бы здорово!
Спасибо !
href\s*=\s*[\"\'](https://www.bouture.com/[^\"\']+)
, вероятно, уже должно сработать.
Спасибо, я попробовал ваше предложение, и оно отлично работает!
просто проверьте $matches[1]
foreach($matches[1] ?? [] as $url){
if (stripos($url, 'bouture.com') !== false){
$first_link = $url;
break;
}
}
вы можете либо использовать положительный просмотр вперед:
/href\s*=\s*[\"\'](?=[^\"\']*bouture.com)([^\"\']+)/
, либо перебирать$matches
и смотреть, совпадает ли что-нибудь. Я бы рекомендовал второй для вас.