块变化在其属性更新后被切换回根块



我正在写一个注册核心查询块变化的WordPress插件。将include添加到查询中:

attributes: {
namespace: MASTER_QUERY_LOOP,
query: {
include: []
},
},

在我将变体插入编辑器并对变体块进行一些设置后,我更新了块属性:

const newInclude = [1]; // just a test ID
setAttributes({query: {include: newInclude}});

我希望我的块变化Master Query Loop将只显示一个ID=1的帖子,但它被切换回核心Query Loop块并继续显示加载指示器。有人能帮我解释一下这种行为吗?

块变体需要isActive属性,以便古腾堡编辑器可以判断该块是默认块还是变体。

如果没有定义isActive,编辑器将匹配默认块—这就是为什么您看到默认查询块被选中,而不是您的变体。

查询块连续显示加载指示,说明查询部分无效。在这种情况下,include:[1]不是通过id获取帖子的有效查询参数。对于您的场景,更好的查询参数是postIn:[1],它接受post id数组。

const MASTER_QUERY_LOOP = 'my-plugin/custom-query'; // Should be unique
registerBlockVariation( 'core/query', {
...
attributes: {
namespace: MASTER_QUERY_LOOP,
query: {
postIn: []
},
},
isActive: ( { namespace, query } ) => {
return (
namespace === MASTER_QUERY_LOOP
// Using just the namespace is fine for query block variations
);
},
});

NB。如果postIn:[]的默认值是一个空数组,postIn将返回has_posts()为true。如果您在属性中设置perPage:1,它将只返回最近的帖子。

参考:WP_Query

最新更新