You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress自定义块编辑时无法读取已保存链接问题求助

解决WordPress自定义块链接无法回显到编辑页面的问题

问题描述

我正在开发首个WordPress自定义块,该块包含两个带链接的按钮。文章更新后链接能正常保存并在前端显示,但再次进入文章编辑页面时,链接输入框为空,无法读取已保存的链接。新链接可正常保存更新,但旧链接无法编辑,给编辑工作造成困扰。

问题原因

问题出在属性定义的source配置上。你为link1和link2设置了source: 'attribute',这意味着WordPress会尝试从保存的HTML内容中提取链接值,而不是直接存储和读取属性值。但编辑组件(Edit)并未渲染出与保存组件(save)结构完全匹配的HTML,导致编辑器无法正确解析已保存的链接。

解决方案

1. 调整属性定义,直接存储链接值

移除属性中的source、selector、attribute字段,让WordPress直接将链接值作为块属性存储,而非从HTML中提取。同时为属性添加默认值,避免初始状态下出现undefined。

2. 规范块注册与组件结构

  • 块的registerBlockType只需执行一次,不要在save.js中重复注册
  • 在save组件中使用useBlockProps.save()保持根元素属性的一致性

修改后的edit.js代码

import { __ } from '@wordpress/i18n';
import { useBlockProps, URLInputButton } from '@wordpress/block-editor';
import { registerBlockType } from '@wordpress/blocks';

import './editor.scss';

registerBlockType( 'my-custom-block', {
    // 保留你的其他配置(title, icon, category等)
    attributes: {
        link1: {
            type: 'string',
            default: ''
        },
        link2: {
            type: 'string',
            default: ''
        }
    },
} );

export default function Edit({ attributes, setAttributes }) {
    const { link1, link2 } = attributes;

    return (
        <div { ...useBlockProps() }>
            <div className="card-afil">
                <div className="btn-afil">
                    <span className="btn-afil-img">
                        <img src="https://www.adoromaquiagem.com.br/wp-content/uploads/2023/05/amazon.webp" />
                    </span>
                    <span className="btn-afil-text-card">
                        <URLInputButton
                            url={ link1 }
                            onChange={ ( newUrl ) => setAttributes( { link1: newUrl } ) }
                        />
                    </span>
                </div>

                <div className="btn-afil">
                    <span className="btn-afil-img">
                        <img src="https://www.adoromaquiagem.com.br/wp-content/uploads/2023/05/beleza-na-web.webp" />
                    </span>
                    <span className="btn-afil-text-card">
                        <URLInputButton
                            url={ link2 }
                            onChange={ ( newUrl ) => setAttributes( { link2: newUrl } ) }
                        />
                    </span>
                </div>
            </div>
        </div>
    );
}

修改后的save.js代码

import { useBlockProps } from '@wordpress/block-editor';

export default function save({ attributes }) {
    const { link1, link2 } = attributes;

    return (
        <div { ...useBlockProps.save() }>
            <div className="card-afil">
                <div className="btn-afil">
                    <span className="btn-afil-img">
                        <img src="https://www.adoromaquiagem.com.br/wp-content/uploads/2023/05/amazon.webp" />
                    </span>
                    <span className="btn-afil-text-card">
                        <a href={ link1 } className="btn-afil-text">Ver Preço</a>
                    </span>
                </div>

                <div className="btn-afil">
                    <span className="btn-afil-img">
                        <img src="https://www.adoromaquiagem.com.br/wp-content/uploads/2023/05/beleza-na-web.webp" />
                    </span>
                    <span className="btn-afil-text-card">
                        <a href={ link2 } className="btn-afil-text">Ver Preço</a>
                    </span>
                </div>
            </div>
        </div>
    );
}

内容的提问来源于stack exchange,提问作者Marcos Nóbrega

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 20:05:22