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

Wordpress 如何通过帖子id获取帖子特色图片,wordpress,wordpress-rest-api,wordpress-gutenberg,gutenberg-blocks,Wordpress,Wordpress Rest Api,Wordpress Gutenberg,Gutenberg Blocks,我需要古腾堡编辑的帮助 我有一个用于自定义帖子类型的动态块。我从RESTAPI获取了所有帖子,现在我想向它们添加特色图片。 我在我的HOC withSelect中有getEditedPostAttribute和getMedia,但我不确定它是否正确,因为wp.data('core/editor')。getEditedPostAttribute('featured_media')总是返回0,所以我的媒体对象总是返回null。 这是我的密码: import { Component } from '@

我需要古腾堡编辑的帮助

我有一个用于自定义帖子类型的动态块。我从RESTAPI获取了所有帖子,现在我想向它们添加特色图片。 我在我的HOC withSelect中有getEditedPostAttribute和getMedia,但我不确定它是否正确,因为wp.data('core/editor')。getEditedPostAttribute('featured_media')总是返回0,所以我的媒体对象总是返回null。 这是我的密码:

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/element'导入{Component};
从'@wordpress/i18n'导入{{uu};
从'@wordpress/data'导入{withSelect};
类portfoliopostedit扩展组件{
render(){
const{posts,className,media}=this.props;
返回(
{(posts&&posts.length>0)?
{posts.map(post=>(
{post.featured_media}
))}
:{(“找不到帖子”,“我的块”)}
}
)
}
}
使用SELECT导出默认值(
(选择,道具)=>{
const{getMedia}=select('core');
const{getEditedPostAttribute}=select('core/editor');
const featuredImageId=getEditedPostAttribute('featured_media');
返回{
posts:select('core')。getEntityRecords('postType','my_公文包','per_page:20'),
媒体:featuredImageId?getMedia(featuredImageId):空,
featuredImageId,
}
}
)(Portfoliopostedit);
那么,我应该如何映射或传递我的媒体对象,以获取每篇文章的特色图像呢?
谢谢。

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

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

您可以向Api请求中添加一个具有post图像URL的新对象。类似的东西-你的意思是添加一个新的rest api吗?在api准备过程中,用图像url添加新的值以存在post对象。我会尝试,但我认为这不是最好的解决方案。谢谢。为了在Front中获得更好的性能,您只能将API更改为_admin()。实际上它是:post._embedded['wp:featuredmedia'][0]。源\u url