如何解决创建页面并发布特定的 ACF Gutenberg 块
我正在创建自定义 ACF Gutenberg 阻止我的站点并成功注册我自己的阻止。现在,我有一个名为 Blog
的自定义帖子类型。我不希望 blog
显示我所有的 ACF Gutenberg 块,我想创建一个单独的批处理,仅供自定义帖子类型使用。我已启用 show_in_rest
,但即使是默认的古腾堡博客也不显示?
这是我的方法:
1.注册帖子类型 (theme/functions.PHP)
<?PHP
register_post_type('Blog',theme_build_post_args('Blog','Blog',array(
'show_in_rest' => true,'menu_icon' => 'dashicons-edit','menu_position' => 20,'has_archive' => true,'public' => true,'supports' => array(
'editor','title','author','revisions','excerpt','thumbnail'
),)));
?>
2.为页面注册 ACF Gutenberg 块 (theme/inc/acf-blocks/blocks.PHP)
以下是我注册在页面上使用的块(不是在 blog
帖子类型上):
<?PHP
$hero = array(
'name' => 'hero','title' => __('Hero'),'description' => __(''),'render_callback' => 'block_render','category' => 'formatting','icon' => 'admin-comments','keywords' => array(
'hero'
),);
$blocks = [$hero];
return $blocks;
?>
<?PHP
$blog_hero = array(
'name' => 'blog_hero','title' => __('Blog hero'),'keywords' => array(
'hero','blog'
),);
$blog_blocks = [$blog_hero];
return $blog_blocks;
?>
<?PHP
/*
* loop though array and register each block type
*/
function block_acf_init(){
$path = get_template_directory().'/inc/acf-blocks/blocks.PHP';
$blocks = require($path);
foreach($blocks as $block) {
acf_register_block_type($block);
}
}
function blog_acf_init(){
$path = get_template_directory().'/inc/acf-blocks/blog-blocks.PHP';
$blog_blocks = require($path);
foreach($blog_blocks as $blog_block) {
acf_register_block_type($blog_block);
}
}
// Check if function exists,and hook into setup
if( function_exists('acf_register_block_type') ) {
add_action('acf/init','block_acf_init');
add_action('acf/init','blog_acf_init');
}
?>
当前结果:
在blog
自定义帖子类型上创建帖子时,我无法添加任何块,更不用说查看是否出现blog_hero
块:
在页面上,我可以看到我创建的所有块,但是,blog hero
块显示在页面一侧,当我只想要它用于自定义帖子类型时:
解决方法
可能这种方式可以解决问题:
为博客英雄块指定post_types
参数到博客
$blog_hero = array(
'name' => 'blog_hero','title' => __( 'Blog hero','Context' ),'description' => __( '','render_callback' => 'block_render','category' => 'formatting','icon' => 'admin-comments','keywords' => array(
'hero','blog'
),'post_types' => array( 'blog' ),);
并类比地为 Hero 块指定除博客之外的所有帖子类型。
$all_post_types = get_post_types();
$hero_block_post_types = array_diff( $all_post_types,array( 'blog' ) );
$hero = array(
'name' => 'hero','title' => __( 'Hero','Domain' ),'keywords' => array(
'hero'
),'post_types' => $hero_block_post_types
);
$blocks = [ $hero ];
return $blocks;
注意:
考虑为您的 __
函数添加域。
将 __
函数与域结合使用的良好做法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。