Ich habe eine Routine implementiert, um Tags/Kategorien programmatisch auf einen Beitrag in Gutenberg anzuwenden. Der Code dafür ist in meiner letzten Frage unter: https://stackoverflow.com/a/70029499/40593 zu sehen und wird auch unten dargestellt:
//Add Tag & Category in one call
function AddTaxonomies(tag, category){
AddTag(tag);
AddCategory(category);
}
//Add Tag & Refresh Panel
function AddTag(tag){
//Get Current Selected Tags
let tags = select( 'core/editor' ).getEditedPostAttribute( 'tags' );
//Get State of Tag Panel
let is_tag_panel_open = select( 'core/edit-post' ).isEditorPanelOpened( 'taxonomy-panel-tags' );
//Verify new tag isn't already selected
if(! tags.includes(tag)){
//Add new tag to existing list
tags.push(tag);
//Update Post with new tags
dispatch( 'core/editor' ).editPost( { 'tags': tags } );
// Verify if the tag panel is open
if ( is_tag_panel_open ) {
// Close and re-open the tag panel to reload data / refresh the UI
dispatch( 'core/edit-post' ).toggleEditorPanelOpened( 'taxonomy-panel-tags' );
dispatch( 'core/edit-post' ).toggleEditorPanelOpened( 'taxonomy-panel-tags' );
}
}
}
//Add Category & Refresh Panel
function AddCategory(category){
//Get Current Selected Categories
let categories = select( 'core/editor' ).getEditedPostAttribute( 'categories' );
//Get State of Category Panel
let is_category_panel_open = select( 'core/edit-post' ).isEditorPanelOpened( 'taxonomy-panel-category' );
//Verify new category isn't already selected
if(! categories.includes(category)){
//Add new tag to existing list
categories.push(category);
//Update Post with new tags
dispatch( 'core/editor' ).editPost( { 'categories': categories } );
// Verify if the category panel is open
if ( is_category_panel_open ) {
// Close and re-open the category panel to reload data / refresh the UI
dispatch( 'core/edit-post' ).toggleEditorPanelOpened( 'taxonomy-panel-category' );
dispatch( 'core/edit-post' ).toggleEditorPanelOpened( 'taxonomy-panel-category' );
}
}
}
Dieser Code wendet ein Tag / eine Kategorie auf einen Beitrag in Gutenberg an (aktualisiert auch die Benutzeroberfläche, um dies widerzuspiegeln) und kann überprüft werden, ob er den Redux-Speicher für den Beitrag aktualisiert hat, indem Sie Folgendes verwenden:
wp.data.select( 'core/editor' ).getEditedPostAttribute( 'tags' )
Allerdings sind mir zwei Probleme aufgefallen:
- Erstens löst das einfache Aktualisieren der Tags / Kategorien auf diese Weise nicht aus, dass die Schaltfläche “Aktualisieren” für den Beitrag aktiv wird. Um dies zu umgehen, muss ich ein privates Metafeld aktualisieren, dann wird es aktiv.
- Wenn Sie dieses Problem umgangen haben, indem Sie ein privates Metafeld aktualisiert haben, dann haben Sie für den Beitrag auf Aktualisieren geklickt. Die Benutzeroberfläche wird neu geladen, aber die neuen Tags/Kategorien werden nicht gespeichert und anschließend aus der Benutzeroberfläche gelöscht.
Irgendein Rat?