古腾堡:如何以编程方式更改帖子状态?

时间:2021-09-30 作者:uruk

我正在为古腾堡编辑器编写一个插件。

我知道如何使用editPost() 要更改某些元值,例如:

editPost( {
    meta: {
         myMeta: \'new meta value goes here\'
    }
} );
这很好用。

但当我尝试change the post status, e、 g.我想取消发布帖子:

editPost( {
    status: \'draft\' // <-- this does not work
} );
还有其他几个功能,例如savePost()trashPost(). 我找不到任何可发布或取消发布的帖子。

如何在自定义Gutenberg插件中更改帖子状态?

1 个回复
最合适的回答,由SO网友:JonShipman 整理而成

您需要在调用editPost后调用savePost。参考来源的处理方式:https://github.com/WordPress/gutenberg/blob/trunk/packages/editor/src/components/post-visibility/index.js 它显示在更改可见性后立即调用savePost。

在实践中:

import { PluginPostStatusInfo } from \'@wordpress/edit-post\';
import { __ } from \'@wordpress/i18n\';
import { registerPlugin } from \'@wordpress/plugins\';
import { ToggleControl } from \'@wordpress/components\';
import { useSelect, useDispatch } from \'@wordpress/data\';

function PostChangeToggle() {
    const status = useSelect( ( select ) => {
        return select( \'core/editor\' ).getEditedPostAttribute( \'status\' );
    }, [] );

    const { editPost, savePost } = useDispatch( \'core/editor\' );

    return (
        <PluginPostStatusInfo
            name="prefix-post-change"
            title={ __( \'Post Change\', \'text-domain\' ) }
            className="prefix-post-change"
            initialOpen={ true }
        >
            <ToggleControl
                label={ __( \'Draft\', \'text-domain\' ) }
                checked={ status === \'draft\' }
                onChange={ () => {
                    editPost( {
                        status: status === \'draft\' ? \'publish\' : \'draft\',
                    } );
                    savePost();
                } }
            />
        </PluginPostStatusInfo>
    );
}

registerPlugin( \'prefix-post-change\', {
    render: PostChangeToggle,
} );
上面的代码将从草稿和发布创建一个简单的来回切换。您可以调出“草稿”或其他状态或自定义状态。我有一个;“过期”;我以类似方式控制的状态。

相关推荐