Как получить изображение поста по идентификатору поста

Мне нужна помощь для редактора Гутенберга.

У меня есть динамический блок для моего произвольного типа сообщения. Я получил все сообщения из rest api, теперь я хочу добавить к ним их избранные изображения. У меня есть getEditedPostAttribute и getMedia в моем HOC withSelect, но я не уверен, что это правильно, потому что wp.data ('core / editor'). GetEditedPostAttribute ('Feature_media') всегда возвращает 0, поэтому мой медиа-объект всегда будет возвращать нулевой. Вот мой код:

import { Component } from '@wordpress/element';
import { __ } from '@wordpress/i18n';
import { withSelect } from '@wordpress/data';

class PortfolioPostsEdit extends Component {
    render() {
        const { posts, className, media } = this.props;
        return (
            <>
                {(posts && posts.length > 0) ?
                    <div className={className}>
                        {posts.map(post => (
                            <article key={post.id}>
                                <a href={post.link}>
                                    {post.title.rendered}
                                </a>
                                <div>
                                    {post.featured_media}
                                </div>
                            </article>
                        ))}
                    </div>
                : <div>{__("No Posts Found", "my-blocks")}</div>
                }
            </>
        )
    }
}

export default withSelect(
    (select, props) => {
    const { getMedia } = select( 'core' );
    const { getEditedPostAttribute } = select( 'core/editor' );
    const featuredImageId = getEditedPostAttribute( 'featured_media' );
        return {
            posts: select('core').getEntityRecords('postType', 'my_portfolio', 'per_page: 20'),
            media: featuredImageId ? getMedia( featuredImageId ) : null,
            featuredImageId,
        }
    }
)(PortfolioPostsEdit);

Итак, как мне сопоставить или передать свой медиа-объект, который я получаю, чтобы получить избранное изображение для каждого сообщения? Спасибо.


person Aslan    schedule 12.10.2019    source источник
comment
Вы можете добавить новый объект с URL-адресом изображения публикации в запрос Api. Примерно так - wordpress.stackexchange.com/questions/231137/   -  person Кирилл Меркушев    schedule 14.10.2019
comment
Вы хотите добавить новый API для отдыха?   -  person Aslan    schedule 14.10.2019
comment
Добавьте новое значение с URL-адресом изображения для существующего объекта сообщения в процессе подготовки API.   -  person Кирилл Меркушев    schedule 14.10.2019
comment
Я попробую, но думаю, это не лучшее решение. Спасибо.   -  person Aslan    schedule 14.10.2019
comment
Вы можете изменить API только is_admin () для повышения производительности впереди   -  person Кирилл Меркушев    schedule 14.10.2019


Ответы (1)


Я обнаружил, что могу использовать _embedded. Итак, мой код стал:

export default withSelect(
(select, props) => {
    return {
        posts: select('core').getEntityRecords('postType', 'my_portfolio', 'per_page: 20', '_embed: true')
    }
})(PortfolioPostsEdit);

Тогда я могу получить свое избранное изображение с помощью

post._embedded['wp:featuredmedia'][0].source_url
person Aslan    schedule 17.10.2019
comment
На самом деле это: post._embedded ['wp: Featuremedia'] [0] .source_url - person Dragi Postolovski; 21.06.2021
comment
@DragiPostolovski Я виноват, ответ отредактировал, спасибо большое! - person AkForDev; 22.06.2021