WP API в React Js (редактор Gutenberg): не может прочитать свойство 'wp: featuredmedia' из неопределенного, даже с условием - PullRequest
0 голосов
/ 17 октября 2019

Я построил динамический блок в редакторе Гутенберга для последних пользовательских сообщений.

И извлекал для них Featuredmedia через _embed. Так что это работает, если во всех моих сообщениях есть изображение, но если нет, у меня ошибка в консоли:

TypeError: Cannot read property 'wp:featuredmedia' of undefined

Итак, я сделал условие, но с той же ошибкой. Что я делаю неправильно? Вот мой код:

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

class PortfolioPostsEdit extends Component {
    render() {
        const { posts, className } = 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>
                                {post._embedded['wp:featuredmedia'] &&
                                    <div className="image">
                                        <img src={post._embedded['wp:featuredmedia'[0].source_url} />  
                                    </div>
                                }
                            </article>
                        ))}
                    </div>
                : <div>{__("No Posts Found", "my-blocks")}</div>
                }
            </>
        )
    }
}

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

Я не могу понять, почему мое состояние не работает:

{post._embedded['wp:featuredmedia'] &&
    <div className="image">
        <img src={post._embedded['wp:featuredmedia'[0].source_url} />  
    </div>
}

Может кто-нибудь помочь мне, пожалуйста? Спасибо.

1 Ответ

0 голосов
/ 17 октября 2019

Это среднее post._embedded не определено. Попробуйте это:

post && post._embedded && post._embedded['wp:featuredmedia'] // make sure post._embedded is defined
...