Проблема:
я пишу из приложения WordPress для iPhone. При добавлении изображения изображение появляется в самом описании, что мне не нравится.
Что я пытаюсь сделать:
удалите изображение из описания и выполните одно из следующих действий (не знаю преимуществ одного варианта над другим):
- Получите источник изображения из удаленного изображения и добавьте его в настраиваемое поле. -ИЛИ-
- Установите изображение в качестве избранного изображения
Я полагаю, что любой из этих вариантов поможет мне изолировать URL-адрес изображения для использования в моих шаблонах сообщений.
Что я пробовал:
Буквально все на свете. Прямо сейчас я добавляю код в functions.php, но в конечном итоге хотел бы сделать это плагином.
Я думаю, что код ниже далеко, но я хочу опубликовать его, чтобы показать некоторые из моих попыток:
Я добавил действие для запуска функции mpb_remove_post_image на content_save_pre…
add_action('content_save_pre', 'mpb_remove_post_image');
Проблема в том, что у меня нет доступа к post_id (который мне нужен для установки избранного изображения) с помощью content_save_pre, поэтому мне нужно получить URL-адрес изображения и искать сообщение с guid, равным исходному изображению..
function mpb_remove_post_image( $content ){
// strip slashes, I guess we need to readd slashes when we're done?
$content = stripslashes($content);
// get the first image src
$image_src = get_first_image($content);
// if there's an image src we can jam
if(!is_null($image_src)){
global $wpdb;
// query the db for an attachment with this image
//$thumb_id = $wpdb->get_var($wpdb->prepare("SELECT DISTINCT ID FROM $wpdb->posts WHERE guid='$image_src'"));
$result = $wpdb->get_results("SELECT ID, post_parent FROM {$wpdb->posts} WHERE guid ='$image_src'");
$thumb_id = $result[0]->ID;
$post_id = $result[0]->post_parent;
// set the featured image
mpb_set_featured_image($thumb_id,$post_id);
// update_post_meta( $post_id, '_thumbnail_id', $thumb_id );
}
// remove any images in the content
$content = preg_replace("/<img[^>]+\>/i", "", $content);
$content = addslashes($content);
return $content;
}
приведенный выше код ссылается на эту функцию, которую я написал для получения изображения…
function get_first_image($html){
require_once('simple_html_dom.php');
$post_dom = str_get_dom($html);
// get the first image
$first_img = $post_dom->find('img', 0);
// if any images then return the src attribute
if($first_img !== null) {
return $first_img->src;
}
return null;
}
И установить избранное изображение…
// set the featured image
function mpb_set_featured_image( $thumb_id, $post_id ){
update_post_meta( $post_id, '_thumbnail_id', $thumb_id );
}
Я также пытался добавить действие для save_post, но все, что я делаю внутри выполняемой функции, похоже, запускает другой хук, который снова запускает save_post, поэтому он превращается в бесконечный цикл.
Кто-нибудь знает (даже если это на высоком уровне), какие шаги я могу предпринять для этого? Подводя итог, вот что я хочу сделать…
При вставке сообщения 1) получите первое изображение src 2) установите его как настраиваемое поле или установите его как избранное изображение 3) удалите изображение из сообщения.
редактировать — я должен упомянуть, что код, который я опубликовал, работает, если вы добавите сообщение через администратора wp. Но не в том случае, если вы добавите его через мобильное приложение.
GIUD изменится со следующей версией wp, поэтому получение идентификатора сообщения через GUID — не лучший план.
Спасибо, да, я понял, что это решение не сработает. Я надеялся, что найдется кто-нибудь, кто взглянет на то, что я пытаюсь сделать, и предложит другое предложение. Я новичок в этом, поэтому то, что у меня есть до сих пор, довольно хакерское.
Просто перечитайте свой вопрос, и TBH, я не уверен на 100%, что это будет вам так полезно…
Почему бы не использовать два хука, один перед сохранением поста и один после сохранения поста?
content_save_pre : функция, связанная с этим хуком, удалит изображение из контента и сохранит его в session/ transient.
save_post : с помощью этого хука у вас будет идентификатор сообщения. Функция, связанная с этим хуком, установит избранное изображение для сообщения с этим идентификатором и удалит данные сеанса / переходные данные.
В качестве альтернативы, если вы хотите использовать свой подход, я думаю, вам следует использовать
post_name
вместоguid
, чтобы получить идентификатор сообщения из базы данных.Не уверен, что это можно использовать в вашем конкретном сценарии, но, возможно, стоит проверить плагин get_the_image.
http://wordpress.org/extend/plugins/get-the-image/
Он проверяет несколько источников, чтобы попытаться найти изображение для отображения — в соответствии с часто задаваемыми вопросами: