Вот пример того, как обойти это ограничение, используя action / hooks:
function new_attachment( $att_id ){// the post this was sideloaded into is the attachments parent!// fetch the attachment post
$att = get_post( $att_id );// grab it's parent
$post_id = $att->post_parent;// set the featured post
set_post_thumbnail( $post_id, $att_id );}// add the function above to catch the attachments creation
add_action('add_attachment','new_attachment');// load the attachment from the URL
media_sideload_image($image_url, $post_id, $post_id);// we have the image now, and the function above will have fired too setting the thumbnail ID in the process, so lets remove the hook so we don't cause any more trouble
remove_action('add_attachment','new_attachment');
Идея в том, что когда media_sideload_imageзапускается, это:
загружает изображение
добавляет его в качестве вложения (пост типа attachment)
затем прикрепляет это вложение к сообщению, чей ID вы указали ($ post_id)
Ваша проблема заключается в том, что он не предоставляет идентификатор недавно созданного вложения сообщений.
Но при создании вложения запускается действие, содержащее его идентификатор. Мы можем подключиться к этому, прежде чем мы создадим вложение, и сохранить миниатюру с указанным идентификатором записи, а затем отцепить его.
Если это отвечает на ваш вопрос, можете ли вы пометить его как правильный?
Том Дж. Новелл
Я не могу прочитать ваш английский. Кто-то может редактировать этот пост?
HiDd3N
2
@ HiDd3N Я упростила некоторые используемые английские слова, в них должно быть больше общих слов с более низким возрастом чтения
Том Дж. Новелл
6
Я построил функцию для получения идентификатора из БД, поиск по URL.
function get_attachment_id_from_src ($image_src){global $wpdb;
$query ="SELECT ID FROM {$wpdb->posts} WHERE guid='$image_src'";
$id = $wpdb->get_var($query);return $id;}
Вы можете получить URL (вставленный из HTML-кода) с четвертым параметром, установленным в 'src'Codex: media_sideload_image ()
@ Tom J Nowell ответ на месте. Я нашел другую альтернативу (с использованием различных функций), объясненную здесь, но мне она нравится больше.
В моем случае у меня есть массив $ posts со всеми публикациями, которые я хочу вставить, и отдельный $ media (те же ключи $ nid, что и $ posts) со СМИ. Мой код такой же, как и у Тома, но с использованием анонимной функции:
В моем случае я предполагаю, что 1-й элемент в каждом $ media [$ nid] должен быть изображением своего поста.
WordPress обязательно должен изменить media_sideload_image (), чтобы он возвращал $ id. Фактически у функции есть это под рукой, см. Источник здесь . На самом деле для этого есть путевой билет, и у них даже есть патчи, чтобы применить его к вашему ядру, если хотите.
Я построил функцию для получения идентификатора из БД, поиск по URL.
Вы можете получить URL (вставленный из HTML-кода) с четвертым параметром, установленным в
'src'
Codex: media_sideload_image ()источник
Больше нет необходимости в старых решениях.
Вы можете получить идентификатор с четвертым параметром ($ return), установленным в 'id'
https://codex.wordpress.org/Function_Reference/media_sideload_image
источник
@ Tom J Nowell ответ на месте. Я нашел другую альтернативу (с использованием различных функций), объясненную здесь, но мне она нравится больше.
В моем случае у меня есть массив $ posts со всеми публикациями, которые я хочу вставить, и отдельный $ media (те же ключи $ nid, что и $ posts) со СМИ. Мой код такой же, как и у Тома, но с использованием анонимной функции:
В моем случае я предполагаю, что 1-й элемент в каждом $ media [$ nid] должен быть изображением своего поста.
WordPress обязательно должен изменить media_sideload_image (), чтобы он возвращал $ id. Фактически у функции есть это под рукой, см. Источник здесь . На самом деле для этого есть путевой билет, и у них даже есть патчи, чтобы применить его к вашему ядру, если хотите.
источник
Я искал решение и решил взглянуть на код,
media_sideload_image()
который был очень простым. Он использует,media_handle_sideload()
что дает нам привязанностьid
.Я изменил его так, чтобы он возвращал вложение
id
вместо html-источника изображения, и даже добавил способ отправить ему новое имя файла.источник