如何通过帖子ID获取帖子特色图片

问题描述 投票:0回答:1

我需要古腾堡编辑器的帮助。

我有一个自定义帖子类型的动态块。我从rest api获取了所有帖子,现在我想向他们添加其特色图片。我在HOC withSelect中有getEditedPostAttribute和getMedia,但是我不确定它是否正确,因为wp.data('core / editor')。getEditedPostAttribute('featured_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);

所以,我应该如何映射或传递我的媒体对象以获取每个帖子的特色图片?谢谢。

wordpress wordpress-rest-api wordpress-gutenberg gutenberg-blocks
1个回答
0
投票

我发现我可以使用_embed。所以我的代码变成:

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

然后我可以通过]获得我的特色图片>

post._embed['wp:featuredmedia'][0].source_url
© www.soinside.com 2019 - 2024. All rights reserved.