如果操作未按预期进行

时间:2020-08-19 作者:Sam

我正在使用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相关,则此问题可能与主题无关。

有什么想法吗?

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

那不是什么has_actionhas_action 如果函数被添加到该挂钩上的火,则为true。这不是一种检测do_action 电话。

然而,在该准则中:

未将任何内容添加到acf_add_class 操作

  • 如果添加了一些内容,它仍然不会工作,因为body_class 筛选器已运行。它要么需要有预见未来的能力,要么需要观察到在挂钩中添加了过滤器page-intro.php, 或page-intro.php 需要对过去进行几微秒的更改
  • 基本上,这种方法无法工作,因为body类已经生成并发送到浏览器。无法修复,需要一个全新的解决方案

    相关推荐

    Problem in functions.php file

    我正在尝试使用functions.php. 以下是我迄今为止所做的工作: <?php function blogroom() { wp_enqueue_style(\'bootstrap\', get_stylesheet_directory_uri() . \'/assets/lib/bootstrap/dist/css/bootstrap.min.css\'); wp_enqueue_style(\'loade