如何向<BODY>标记添加数据属性

时间:2020-08-29 作者:Daveh0

我需要向每个页面的标记中添加一个具有用户提供的值的数据属性(通过自定义字段)。我试着编辑标题。php本身

<body <?php astra_schema_body(); ?> <?php bene_body_class(); ?> data-myAttr="<?php get_post_meta(get_the_id(),\'my_attr\')[0] ?>">
但当我加载页面时,该属性不会显示。我猜主题去掉了所有未知属性?

是否有一个过滤器,我可以使用它添加到通过功能。php?

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

有两种方法可以解决这个问题。第一个是你正在尝试的,但你必须打印出你得到的价值。像这样:

print get_post_meta();
我不建议这样做,原因有二:

你应该让模板尽可能简单。否则,它们就会被业务代码的碎片弄得乱七八糟,这使得一切都很难维护写下您的body 改为这样标记:

<body 
    <?php 
    do_action( \'body_start_tag_attributes\' ); 
    astra_schema_body(); 
    bene_body_class(); 
    ?>
>
请注意do_action() 我介绍过。这允许您从任何地方添加所需的任何代码。现在让我们在你的functions.php:

add_action( \'body_start_tag_attributes\', function() {
    
    if ( ! is_singular() ) {
        return; // an archive or a 404
    }
    
    $post = get_post();
    // the last parameter means you get the first entry of the meta array.
    $meta = get_post_meta( $post->ID, \'my_attr\', true );
    
    if ( ! $meta ) {
        return; // no meta value
    }
    
    $value = esc_attr( $meta );
    
    print \' data-myAttr="\' . $value . \'"\';
});
正如你所见,你需要一些;防护装置;打印值之前:检查当前页面的类型(单数)、属性的存在,最后出于安全原因转义该值。

然后,只有到那时,你才能打印出来。

您甚至可以重用钩子来添加其他属性,以备以后需要-无需对模板进行任何进一步更改!

相关推荐

使用Add_Filters()、Apply_Filter()、Add_action()和do_action()扩展插件

假设我正在开发一个与预订相关的插件。下次我想在那个插件上添加一个附加组件来支付。然后,我为贝宝支付添加了另一个附加组件。假设下面是html中的支付网关UI界面<div class=\"payments-options\"> <div class=\"bank-payment\"></div> <div class=\"cash-on-delivery\"></div> <!--- Here i