我正在使用ACF Blocks 在我正在构建的主题中。
这是我在/my plugin/template parts/blocks/page intro/page intro中的块模板文件。php:
<?php
/**
* Page Intro Block Template.
*
* @param array $block The block settings and attributes.
* @param string $content The block inner HTML (empty).
* @param bool $is_preview True during AJAX preview.
* @param (int|string) $post_id The post ID this block is saved to.
*/
?>
<?php do_action(\'acf_add_class\'); ?>
<div class="page-intro-wrapper" style="background: url(<?php esc_url( the_field(\'background_image\') ); ?> )">
<div class="page-intro">
<h2><?= esc_html( get_field(\'title\') ); ?></h2>
<?= get_field(\'text\'); ?>
</div>
</div>
你会看到我添加了
<?php do_action(\'acf_add_class\'); ?>
在顶部。
然后,我通过我的插件拥有以下内容:
/**
* Add custom classes to body
*/
function body_classes( $classes ) {
if ( has_action(\'acf_add_class\') ) {
$classes[] = \'page-intro\';
}
return $classes;
}
add_filter( \'body_class\', \'body_classes\' );
我希望
if ( has_action(\'acf_add_class\') ) {
将触发条件并添加类,但这不起作用。
我也在body_class
过滤器:
if ( has_action(\'acf_add_class\', get_queried_object_id() ) ) {
$classes[] = \'page-intro\';
}
如果问题与ACF相关,则此问题可能与主题无关。
有什么想法吗?
最合适的回答,由SO网友:Tom J Nowell 整理而成
那不是什么has_action
做has_action
如果函数被添加到该挂钩上的火,则为true。这不是一种检测do_action
电话。
然而,在该准则中:
未将任何内容添加到acf_add_class
操作
如果添加了一些内容,它仍然不会工作,因为body_class
筛选器已运行。它要么需要有预见未来的能力,要么需要观察到在挂钩中添加了过滤器page-intro.php
, 或page-intro.php
需要对过去进行几微秒的更改基本上,这种方法无法工作,因为body类已经生成并发送到浏览器。无法修复,需要一个全新的解决方案