WordPress在使用wp_insert_post时从base64编码的图像中删除'data'属性

bwitn5fc  于 12个月前  发布在  WordPress
关注(0)|答案(1)|浏览(259)
  • 编辑1*

这与浏览器无关。如果我没有登录,就会发生这种情况。当我登录时,它工作得很好。抱歉这么匆忙。
我知道这很奇怪,没有任何意义,也很难解释。
正如标题所说,浏览器导致这个问题,但我不确定。
所以我有一个图像服务,从某处读取一些数据,并根据读取的数据创建图像。然后它做了一些事情,并返回base64格式的图像,这样我就可以在我的网站上使用这些图像。这个过程在我打开网站上的页面时就开始了。
问题是,如果我在Safari上打开页面,它可以正常工作,但今天我试图在Chrome上打开页面,图像无法加载。所以我检查了图像,发现数据URI的开头没有data属性。
让我用一个例子来解释;
下面是我创建HTML模板时的代码

presets += `<div class="icon"> <img src="data:image/png;base64,${icon}"></div>`
  presets += `<p class="name">${name}</p>`
  presets += `<div class="image"> <img src="data:image/png;base64,${image}"/></div>`

字符串
我做了一些事情,然后返回这些数据,在 Postman 和Safari上,我得到了这个结果:

<div class="icon"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA{ ... }"></div>


所以这很好。没什么不好。
但当我在Chrome或Opera上打开页面时,我得到了这个;

<div class="icon"> <img src="image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA{ ... }"></div>


看到没?没有data属性。我在Wordpress中插入一个帖子,这是帖子的内容。为什么会发生这种情况?我希望我已经解释清楚了。

编辑2

这是我用来插入帖子的函数

function programmatically_create_post($title, $content, $slug)
{

    // Setup the author,
    $author_id = 4;

    // If the page doesn't already exist, then create it
    if (!the_slug_exists($slug)) {

            // Set the post ID so that we know the post was created successfully
            wp_insert_post( 
                    array(  
                            'post_title'            =>      $title,
                            'post_content'          =>      $content,
                            'comment_status'        =>      'closed',
                            'ping_status'           =>      'closed',
                            'post_author'           =>      $author_id,
                            'post_name'             =>      $slug,  
                            'post_status'           =>      'publish',
                            'post_type'             =>      'post', 
                            'page_template'         =>      'dynamic-post.php',
                            'post_category'         =>      array(1,60)
                         )
            );
            // Redirect user to the post after the post created
            wp_redirect(get_site_url() . '/blog/' . $slug);
            exit();
            // Otherwise, we'll stop
    } else {
            return;
    } // end if

} // end programmatically_create_post

dgiusagp

dgiusagp1#

好吧,这是一个噩梦找到,但我想我已经解决了通过wp_insert_post挂钩的WordPress代码挖掘后.请将此添加到您的functions.php文件,并检查它的工作:

add_filter('kses_allowed_protocols', function ($protocols) {
    $protocols[] = 'data';

    return $protocols;
});

字符串
本质上,在WordPress内部有一个过滤器,它检查内容中任何URL的协议,并剥离任何它不喜欢的协议。默认情况下,支持的列表不支持数据协议。上述函数只是将其添加到支持的协议列表中。
如果您是管理员,则此筛选器不会运行,这可能是您仅在注销时看到此问题的原因。

相关问题