微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

创建页面并发布特定的 ACF Gutenberg 块

如何解决创建页面并发布特定的 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;

?>

  1. 博客文章类型注册 ACF Gutenberg 块 (theme/inc/acf-blocks/blog-blocks.PHP)

<?PHP
$blog_hero = array(
    'name' => 'blog_hero','title' => __('Blog hero'),'keywords' => array(
        'hero','blog'
    ),);

$blog_blocks = [$blog_hero];

return $blog_blocks;

?>

  1. 注册所有块 (theme/inc/acf-blocks/functions.PHP)

<?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块:

enter image description here

页面上,我可以看到我创建的所有块,但是,blog hero显示页面一侧,当我只想要它用于自定义帖子类型时:

enter image description here

解决方法

可能这种方式可以解决问题:

博客英雄块指定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 举报,一经查实,本站将立刻删除。