Pregunta:
Estoy escribiendo un complemento para el editor de Gutenberg.
Sé cómo usar editPost()
para cambiar, por ejemplo, algunos meta-valores:
editPost( {
meta: {
myMeta: 'new meta value goes here'
}
} );
Esto está funcionando bien.
Pero cuando intento cambiar el estado de la publicación , por ejemplo, quiero anular la publicación de una publicación:
editPost( {
status: 'draft' // <-- this does not work
} );
Hay varias otras funciones, como savePost()
o trashPost()
. No pude encontrar nada para publicar o anular la publicación de una publicación.
¿Cómo puedo cambiar el estado de la publicación dentro de un complemento Gutenberg personalizado?
Respuesta:
Debe llamar a savePost después de llamar a editPost. Refiriéndose a la forma en que la fuente lo maneja: https://github.com/WordPress/gutenberg/blob/trunk/packages/editor/src/components/post-visibility/index.js , muestra que se llama a savePost justo después de cambiar la visibilidad .
En la práctica:
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,
} );
El código anterior creará un simple alternar entre el borrador y la publicación. Puede cambiar "borrador" u otro estado o un estado personalizado. Tengo un estado "caducado" que controlo de manera similar.