如何在PHP中获取一个块的所有属性?

时间:2020-03-08 作者:Winston

我正在重写PHP中的核心图像块。一切都很顺利,只是我发现Javascript中该块的所有属性都没有传递给PHP供我使用。

如何覆盖图像块:

    //Override core/image block with render callback
    function override_image_block_output($attributes, $content){
      //Override the image block
      var_dump($attributes);
    }

    function reregister_image_block(){
        register_block_type( \'core/image\', array(
            \'render_callback\' => \'override_image_block_output\',
        ) );
    }

    add_action(\'init\', \'reregister_image_block\');
当我这样做,var\\u转储$attributes, 我只有这些

array(3) { ["id"]=> int(282) ["sizeSlug"]=> string(5) "large" ["linkDestination"]=> string(6) "custom" }
但在Javascript中,您可以通过以下方式查看该块的属性:

const { addFilter } = wp.hooks;
const __ = wp.i18n.__; // The __() for internationalization.
const el = wp.element.createElement; // The wp.element.createElement() function to create elements.
const { RichText } = wp.blockEditor;
const { InnerBlocks } = wp.blockEditor;

const OverrideImageBlock = (element, blockType, attributes) => {
    if ( blockType.name === \'core/image\' ) {
        console.log(attributes);
        return element;
    }

    return element;
};

addFilter(
  "blocks.getSaveElement",
  "custom-blocks/override-core-image-block",
  OverrideImageBlock
);
属性返回以下内容:enter image description here

如何将“href”从块的属性传递到PHP?为什么有些通过了,但有些最初没有通过?

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

我相信你做不到。无论如何,这并不容易。我很高兴被纠正,但这是我对问题的理解:

块可以通过多种方式存储其属性。它们可以作为JSON存储在块注释中,如下面的示例the documentation:

<!-- wp:latest-posts {"postsToShow":4,"displayPostDate":true} /-->
这些属性在PHP中可能是可访问的,因为它们可以用parse_blocks().

但是,大多数其他块(包括图像块)都是通过解析HTML来重建其属性的。在另一个示例中,块注释中未指定任何属性。只有最后的HTML:

<!-- wp:image -->
<figure class="wp-block-image"><img src="source.jpg" alt="" /></figure>
<!-- /wp:image -->
对于这样的块,属性是从HTML重建的。执行此操作的逻辑仅在块中可用。json,如下所示:

"url": {
    "type": "string",
    "source": "attribute",
    "selector": "img",
    "attribute": "src"
},
"alt": {
    "type": "string",
    "source": "attribute",
    "selector": "img",
    "attribute": "alt",
    "default": ""
},
这告诉街区alt 属性可以通过查找alt 的属性img 块中的标记url 属性可以通过查看src 属性可以查看查找块属性的一些方法here.

在您的示例中,您会注意到您有权访问的属性是没有存储在块的HTML中的值。

因此,对于许多块,重构属性以进行编辑/修改的逻辑仅在该块的JavaScript中定义。这种逻辑在PHP中不存在。

如果需要从PHP访问这些属性,则需要自己从HTML中解析它们。每个块的逻辑都不同。

相关推荐