Я запускаю несколько боковых блогов, которые я сортирую в своем основном блоге. Я использую simplepie для разбора фидов из других моих блогов, поэтому записи создаются автоматически.
Мой типичный пост выложен следующим образом:
То, что я ищу, это автоматически захватить гиперссылку и вставить ее в пользовательское поле. Пользовательское поле уже существует в сообщении, но мне нужно вставить гиперссылку, содержащуюся в сообщении, в качестве значения.
Мне нужна только ссылка, без html, поэтому значение будет просто прямой ссылкой – http://domain.com/fsdds
Я знаю, что есть несколько плагинов, которые выполняют это с изображениями, но я не видел ничего, что сделало бы это с чем-нибудь еще, например с гиперссылками.
Я разместил этот вопрос на форумах WordPress, и мне сказали, что мне придется разбирать весь контент, содержащий ссылки, которые я знал, проблема в том, что я не слишком уверен, как это сделать.
благодаря
Основываясь на ответе Энтони, используйте UPDATE POST META, когда у вас есть ссылка …
Поместите это в свой файл functions.php:
function catch_that_link() { global $post, $posts; $first_link = ''; ob_start(); ob_end_clean(); $output = preg_match_all('/(https?://)?(www.)?([a-zA-Z0-9_%]*)\b.[az]{2,4}(.[az]{2})?((/[a-zA-Z0-9_%])+)?(.[az])?/', $post->post_content, $matches); $first_link = $matches [1] [0]; if(empty($first_link)){ //Defines a default image return 'no link found'; } return $first_link; }
Затем в вашем цикле запросов, файле категории или любом другом php-файле вы будете делать следующее
<?php $post_id = 13; //replace the number with the specific post $meta_key = 'key_example' //replace with your custom field name $meta_value = catch_that_link(); update_post_meta($post_id, $meta_key, $meta_value); ?>
Это функция, которая захватывает первое изображение в сообщении:
function catch_that_image() { global $post, $posts; $first_img = ''; ob_start(); ob_end_clean(); $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches); $first_img = $matches [1] [0]; if(empty($first_img)){ //Defines a default image $first_img = "/images/default.jpg"; } return $first_img; }
вам просто нужно заменить первый параметр preg_match_all на:
'/(https?://)?(www.)?([a-zA-Z0-9_%] ) \ b. [az] {2,4} (. [az] {2})? (( / [a-zA-Z0-9_%] ) +)? (. [az] *)? / '
Добавьте всю функцию в ваш functions.php и вызовите эту функцию из вашего скрипта. Он должен вернуть первую ссылку, найденную в сообщении.
Я сам об этом думал, и решение должно состоять в том, чтобы запустить функцию над кликом save_post . К сожалению, это недокументировано в WordPress Codex, и я еще не успел заглянуть дальше.
Просто наткнулся на эту функцию Reference / add post meta
По-прежнему нужен способ захватить гиперссылку из сообщения и вставить ее как $ metavalue.