首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以loggen为编辑器时动态块属性的错误编码

以loggen为编辑器时动态块属性的错误编码
EN

WordPress Development用户
提问于 2020-10-15 16:35:47
回答 1查看 179关注 0票数 0

动态块属性(字符串)中的德语值在数据库中(当它是编辑器时)被错误地编码/保存,但是如果由管理员编辑,则是正确的。

如何复制:

  1. 创建一个dynamich块插件: testblock.php
代码语言:javascript
复制
    '.$block_attributes['dataTest'].'';
    }
     
    function wrong_encoding_dynamic() {
    
        wp_register_script(
            'test',
                    plugins_url( 'testblock.js',__FILE__ ), 
                    
                    array( 'wp-editor', 'wp-i18n', 'wp-element', 'wp-components', 'wp-blocks' ),
                    '1.0.0',
                    true
        );
     
        register_block_type( 'dev/test', array(
            'editor_script' => 'test',
            'render_callback' => 'test_callback'
        ) );
     
    }
    add_action( 'init', 'wrong_encoding_dynamic' );

testblock.js:

代码语言:javascript
复制
( function( blocks, element, data ) {
    var el = element.createElement,
        registerBlockType = blocks.registerBlockType;
const {
        TextControl,

    } = wp.components;

 
    registerBlockType( 'dev/test', {
        title: 'Dev: Test',
        icon: 'megaphone',
        category: 'widgets',
        attributes: {
            dataTest:{
                    type:'string',
                    default:'ÄÖÜäöüß'
                },
        },
        edit: function( props ) {
            return el(TextControl,{
                                onChange: ( value ) => {    
                                                        props.setAttributes({dataTest:value});
                                                        },
                                          }
         );
    }
});
 }(
    window.wp.blocks,
    window.wp.element,
    window.wp.data,
 ) );
  1. 以超级管理员的身份登录,Activete插件,创建一个新的帖子,添加块并键入一些umlauts。保存或发布文章&查看输出
  2. 注销。作为编辑器登录,重复步骤2,比较输出。

例如,db中的post内容:

代码语言:javascript
复制

但应该是:

代码语言:javascript
复制

你知道怎么回事吗?

EN

回答 1

WordPress Development用户

回答已采纳

发布于 2020-10-16 16:44:34

解决它:这是一个兼容性问题。在古腾堡之前的几天里,我们可以用这种方式更新一篇文章:

代码语言:javascript
复制
// get post object by id
$post_obj = get_post($post_id);         
// do something with post_content
    
// unhook this function so it doesn't loop infinitely
remove_action( 'save_post', array($this, 'replace_postcontent') );
// update the post, which calls save_post again
wp_update_post( array( 'ID' => $post_obj->ID, 'post_content' => $post_obj->post_content ) );
// re-hook this function
add_action( 'save_post', array($this, 'replace_postcontent') );

它仍然可以工作,但是会引起像上面所描述的问题。解决方案只是使用post对象。而不是:wp_update_post( array( 'ID' => $post_obj->ID, 'post_content' => $post_obj->post_content ) ); use:wp_update_post( $post_obj );

票数 0
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/376555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档