jyoseph
  • 0
Новичок

Извлечь изображение из контента и установить его в качестве рекомендуемого изображения

  • 0

Проблема:

я пишу из приложения WordPress для iPhone. При добавлении изображения изображение появляется в самом описании, что мне не нравится.

Что я пытаюсь сделать:

удалите изображение из описания и выполните одно из следующих действий (не знаю преимуществ одного варианта над другим):

  1. Получите источник изображения из удаленного изображения и добавьте его в настраиваемое поле. -ИЛИ-
  2. Установите изображение в качестве избранного изображения

Я полагаю, что любой из этих вариантов поможет мне изолировать 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. Но не в том случае, если вы добавите его через мобильное приложение.

Share
  1. GIUD изменится со следующей версией wp, поэтому получение идентификатора сообщения через GUID — не лучший план.

    • 0
  2. Почему бы не использовать два хука, один перед сохранением поста и один после сохранения поста?

    content_save_pre : функция, связанная с этим хуком, удалит изображение из контента и сохранит его в session/ transient.

    save_post : с помощью этого хука у вас будет идентификатор сообщения. Функция, связанная с этим хуком, установит избранное изображение для сообщения с этим идентификатором и удалит данные сеанса / переходные данные.

    В качестве альтернативы, если вы хотите использовать свой подход, я думаю, вам следует использовать post_name вместо guid, чтобы получить идентификатор сообщения из базы данных.

    • 0
  3. Не уверен, что это можно использовать в вашем конкретном сценарии, но, возможно, стоит проверить плагин get_the_image.

    http://wordpress.org/extend/plugins/get-the-image/

    Он проверяет несколько источников, чтобы попытаться найти изображение для отображения — в соответствии с часто задаваемыми вопросами:

    Как он загружает изображения?

    • Ищет изображение по произвольному полю (по вашему выбору).
    • Если изображение не добавляется в настраиваемое поле, проверьте наличие изображения с помощью the_post_thumbnail() (новая функция изображения в WP 2.9).
    • Если изображение не найдено, оно захватывает изображение, прикрепленное к вашему сообщению.
    • Если изображение не прикреплено, он может извлечь изображение из содержимого вашего сообщения (по умолчанию отключено).
    • Если на этом этапе изображение не найдено, по умолчанию будет установлено изображение, которое вы установили (не установлено по умолчанию).
    • 0

Оставить ответ

You must login to add an answer.