posty — Jak uzyskać mój element Gutenberga, aby zapobiec aktualizacji ostatniej modyfikacji?

Dodałem pole wyboru do mojego postu Gutenberga, którego zaznaczenie ma uniemożliwić Gutenbergowi aktualizację postu post_modified
I post_modified_gmt
kolumny. Pole wyboru zarządza własnym stanem, ale status pola wyboru nie jest przesyłany, gdy aktualizuję post.
Oto kod umożliwiający dodanie pola wyboru (wiem, że powinienem zamiast tego używać JSX, ale nie podoba mi się to).
'use strict';
if (window.wp) {
(function (wp) {
// Only applies to published posts. NOT WORKING.
//if(wp.data.select('core/editor').getEditedPostAttribute('status') !== 'publish') return;
var registerPlugin = wp.plugins.registerPlugin,
PluginPostStatusInfo = wp.editPost.PluginPostStatusInfo,
CheckboxControl = wp.components.CheckboxControl,
withSelect = wp.data.withSelect,
__ = wp.i18n.__;
var LastUpdatedTime = withSelect(function (select) {
return {
'lastUpdated': select('core/editor').getEditedPostAttribute('modified'),
};
})(function (props) {
return [
wp.element.createElement(
'span',
null,
__('Last Modified','rabbit')
),
wp.element.createElement(
'div',
null,
wp.element.createElement(
'strong',
null,
props.lastUpdated
)
)
];
});
var PluginPostStatusInfoUpdateLastModified = function () {
var [preventUpdateTime, setPreventUpdateTime] = wp.element.useState(false),
handleCheckboxChange = function() {
setPreventUpdateTime(!preventUpdateTime);
};
return wp.element.createElement(
PluginPostStatusInfo,
{ 'className': 'edit-post-update-last-modified' },
wp.element.createElement(CheckboxControl, {
'label': __('Do not update last modified time','rabbit'),
'checked': preventUpdateTime,
'onChange': handleCheckboxChange,
'name': 'no_update_last_modified'
})
);
};
var PluginPostStatusInfoLastModified = function () {
return wp.element.createElement(
PluginPostStatusInfo,
{ 'className': 'edit-post-last-modified' },
wp.element.createElement(LastUpdatedTime)
);
};
registerPlugin('post-status-info-last-modified', { 'render': PluginPostStatusInfoLastModified });
registerPlugin('post-status-info-update-last-modified', { 'render': PluginPostStatusInfoUpdateLastModified });
})(window.wp);
}
Ponieważ stan pola wyboru nie jest wysyłany do PHP, nie mogę wykryć, czy jest ono zaznaczone w pliku wp_insert_post_data
filtr:
// shit don't work
if($_POST['no_update_last_modified']) { ... }
Ale poza tym, nawet jeśli zrobię jedno i drugie wp_insert_post_data
I rest_prepare_post
usuń ustawienie ostatnio zmodyfikowanych i ostatnio zmodyfikowanych atrybutów GMT, oba po prostu kończą się niepowodzeniem, więc podejrzewam, że Gutenberg używa innej metody, aby zaktualizować datę ostatniej modyfikacji mojego postu:
static function wp_insert_post_data($data, $postarr, $unsanitized_postarr, $update) {
if(!$update) return $data;
// Check if it's the right post type to apply this modification
if(in_array($data['post_type'], self::$post_types)) { // && !empty($_POST['no_update_last_modified'])) {
unset($data['post_modified'], $data['post_modified_gmt']);
}
return $data;
}
static function rest_prepare_post( $data, $post, $request ) {
if(!is_a($data,'WP_REST_Response')) return $data;
// Check if it's a REST API request
$arr = $data->get_data();
unset( $arr['modified'], $arr['modified_gmt'] );
$data->set_data( $arr );
set_transient('REST',$data);
return $data;
}
Ktoś może pomóc? Gutenberg ma fatalną dokumentację. Bardzo trudno jest znaleźć dosłownie jakąkolwiek dobrą dokumentację dotyczącą tego, jak cokolwiek z tym zrobić.
PS Tak, wiem, że mogę do tego użyć metaboksa, ale znacznie eleganckoj jest zintegrować to z Gutenbergiem.