古腾堡:防止链接在区块中被点击。错误:“无法对‘r’的属性‘FrameElement’进行结构分析,因为它为空。”

时间:2022-01-14 作者:Marc

我将我的区块添加到一篇文章和新的完整站点编辑中。块渲染标记。当我在编辑器中选择块时,我单击标记,得到一个;“r”的属性“frameElement”为空,无法对其进行分解"E;并重新加载自身。

export default function Edit( { attributes, setAttributes } ) {

    return (
    <div { ...blockProps  } >
    <InspectorControls>
        <Panel>
            <PanelBody>
                <PanelRow>
                    <MyFontSizePicker />
                </PanelRow>
            <PanelRow>
            </PanelBody>
        </Panel>
    </InspectorControls>
        
    <ServerSideRender 
        block="game-review/random-game" 
        attributes={ attributes }
    />
    </div>
    );
}
回调执行以下操作:

function render_random_game(){

 $link = \'<a \' . $fontsizeattr . \' href="\' . $url . \'">\' . $game_title . \'</a>\';
 return "<p>" . $link . "</p>";

}
知道为什么会这样吗?我的其他插件的其他块运行良好。以下是上下文的完整源代码:https://github.com/mtoensing/game-review-block/tree/main/blocks/random-game

2 个回复
SO网友:Marc

这似乎有助于:

$is_backend = defined(\'REST_REQUEST\') && true === REST_REQUEST && \'edit\' === filter_input(INPUT_GET, \'context\', FILTER_SANITIZE_STRING);

 if ( $is_backend == true) {
        $url = "#void";
    } else {
        $url = get_permalink( $post_id );
    };

$link = \'<a \' . $fontsizeattr . \' href="\' . $url . \'" target="_self">\' . $game_title . \'</a>\';

return "<p>" . $link . "</p>";
#void为我工作。

SO网友:Marc

最佳实践似乎是在后端使用标记而不是标记进行服务器端渲染。

$is_backend = defined(\'REST_REQUEST\') && true === REST_REQUEST && \'edit\' === filter_input(INPUT_GET, \'context\', FILTER_SANITIZE_STRING);

$tag = \'a\';

if ($is_backend) {
   $tag = \'span\';
}
            
$html = \'<\'.$tag.\' href="\' . $url . \'">\' .  $title . \'</\'.$tag.\'>\';