Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress 如何级联Gutenberg SelectControl组件_Wordpress_Wordpress Gutenberg_Gutenberg Blocks_Create Guten Block_Project Gutenberg - Fatal编程技术网

Wordpress 如何级联Gutenberg SelectControl组件

Wordpress 如何级联Gutenberg SelectControl组件,wordpress,wordpress-gutenberg,gutenberg-blocks,create-guten-block,project-gutenberg,Wordpress,Wordpress Gutenberg,Gutenberg Blocks,Create Guten Block,Project Gutenberg,如何在Gutenberg编辑器中级联SelectControl组件 我请求所有的专业人士帮我解决这个问题。我有8个月的wordpress经验,几乎没有ES next Javascript或React方面的经验 我的具体要求如下:我的第一个选择列表包含post meta字段,在第二个选择列表中,我想显示包含在第一个选择列表中选择的post meta的帖子。我使用getEntityRecords和自定义查询来获取自定义帖子 我只想更改第一个选择列表,我想使用getEntityRecords刷新第二个

如何在Gutenberg编辑器中级联SelectControl组件

我请求所有的专业人士帮我解决这个问题。我有8个月的wordpress经验,几乎没有ES next Javascript或React方面的经验

我的具体要求如下:我的第一个选择列表包含post meta字段,在第二个选择列表中,我想显示包含在第一个选择列表中选择的post meta的帖子。我使用getEntityRecords和自定义查询来获取自定义帖子

我只想更改第一个选择列表,我想使用getEntityRecords刷新第二个选择列表的选项

以下是js代码:

    ( function( blocks, blockEditor, element, components, serverSideRender  ) {
    var el = element.createElement;
    var InspectorControls = blockEditor.InspectorControls;
    var SelectControl = components.SelectControl;
      
    
    blocks.registerBlockType( 'custom-blocks/news-selection', {
        title: 'News (selection)',
        icon: 'universal-access-alt',
        category: 'custom-blocks',
        example: {
            attributes: {
                posts_per_page: 3
            },
    },


    edit: function( props ) {

        var options_news =  new Array();     
       
        if (props.isSelected) {

            var options_page_group = [];
    
            var page_query = {
                per_page: -1,
                parent: 0,
                orderby: 'menu_order',
                order: 'asc',
                status: 'publish,future,draft,pending,private',
            };

            (wp.data.select('core').getEntityRecords('postType', 'page', page_query)).forEach((post) => { 
                options_page_group.push({value:post.id, label:post.title.rendered});
            });

            function make_request_for_news(pgrp_id){

                props.setAttributes({news_1_id: null}); 

                var news_query = {
                    per_page: 10,
                    orderby: 'publication_date',
                    order: 'desc',
                    meta_key: 'news_page_group',
                    meta_value: pgrp_id
                };

                let p = new Promise((resolve, reject) => {
                    let news = (wp.data.select('core').getEntityRecords('postType', 'news', news_query));

                    if (news!== null) {
                        console.log('got the response');
                        resolve(news);
                    } else {
                        reject('noooo');
                    }
                });

                p.then((resp)=> {
                    populate_news_select_list(resp);
                }).catch((resp) => {
                    console.log(resp);
                });


            }


            function populate_news_select_list(resp){
                /*Here I am getting the response but from here how can I set these as options of the selectcontrol component*/
                resp.forEach(post => {
                    options_news.push({value:post.id, label:post.title.rendered});
                });



            }
            
                      

        return [ //Inspector control element
                el(InspectorControls,
                    {key: "inspector"},

                    el( SelectControl,
                        {
                            label: js_ref_obj.page_group_selection,
                            options : [{ value: -1, label: '-Select-' }].concat(options_page_group),
                            onChange: function( content ) {
                                props.setAttributes({page_group_id: content}); 
                                if (content > 0) {
                                    make_request_for_news(content);
                                }
                            },
                            value: props.attributes.page_group_id,
                        }
                    ),
                    el( "div",
                        {style : {display : props.attributes.page_group_id>0 ? "block" : "none" }},
                        el( SelectControl,
                            {
                                label: js_ref_obj.news_selection + ' 1',
                                options : [{ value: null, label: '-Select-' }].concat(options_news),
                                onChange: function( content ) {
                                    props.setAttributes({news_1_id: content}); 
                                },
                                value: props.attributes.news_1_id,
                            }
                        )
                    ),
                    
                    
                ),
                el(serverSideRender,
                    {key: "editable",
                        block: "custom-blocks/news-selection",
                        attributes: props.attributes
                    }
                )
                    
            ];
        }

        else {
            
            return [
                //serverSideRender element for live state preview.
                    el(serverSideRender,
                        {key: "editable",
                            block: "custom-blocks/news-selection",
                            attributes: props.attributes
                        }
                    )
            ];
        }
       
    

    },

    save: function( props ) {
        return null;

    },
} );
}(
    window.wp.blocks,
    window.wp.blockEditor,
    window.wp.element,
    window.wp.components,
    window.wp.serverSideRender
) );
任何帮助都将不胜感激。谢谢