如何阻止WordPress更新帖子
在更新元数据之前,WordPress启动过滤器"update_{$meta_type}_metadata"
. 这是一个动态过滤器,取决于元数据附加到的帖子类型。例如update_post_metadata
将在更新post
post\\u类型。同样地update_page_metadata
将在更新page
元数据。
一个问题可能是您的帖子类型不是帖子,在这种情况下,钩子永远不会开火。您提供的代码应该会使所有post
元数据。
另一种可能的情况是,有另一个插件或主题正在连接到update_post_metadata
在你之后。在您的代码中,您的优先级为10。您可以在稍后的时间(如9999)连接到该事件。连接到此过滤器的其他函数/方法将在您的函数/方法之前运行,您基本上会覆盖它们。
add_filter( \'update_post_metadata\', \'wpse_249566\', 9999, 5 );
function wpse_249566( $check, $object_id, $meta_key, $meta_value, $prev_value ) {
//* Return true or false depending on if the meta_value is empty
return \'\' === $meta_value ? false : true;
}
如果这两个都不能解决问题,那么我能看到的唯一其他可能的问题是,您在WordPress处理
update_post_metadata
钩
如果没有任何工作,并且您希望在插入数据库之前拦截所有元数据,例如测试挂钩是否实际启动,那么您可以使用类似的方法。
//* Hook into admin_init to add filters to wp-admin
add_action( \'admin_init\', function() {
//* Basically foreach $post_type
array_map( function( $post_type ) {
//* Add a filter for when each of the post_type metadata updates
add_filter( "update_{$post_type}_metadata", function(){
//* Add action to wp_head to alert us
add_action( \'wp_head\', function() use ( $post_type ) {
print "alert( \\"Prevented $post_type metadata from updating.\\" );"
}
return false;
}, 9999 );
}, array_keys( get_post_types() ) );
}