这是因为你做得太早了。您需要将代码包装在必要的挂钩中,以便它在正确的时间发生。
因为你不告诉我get_field
当前帖子的ID,它需要知道从哪个帖子获取字段,并通过引用全局变量来实现$post
, 当你打电话的时候the_post
, 或者在页面加载的早期通过WP-Core。
但是,如果在设置之前尝试这样做,函数将不知道当前帖子是什么,并且会失败。这就是你所看到的functions.php
. 什么时候functions.php
已加载,WordPress尚未设置post循环或查询数据库,它仍在加载主题和插件文件的过程中。最早的事件/挂钩$post
已设置,将是wp
事件,则代码运行时间早于此。
因此,让我们参考core load diagram, 这说明从init
钩住并向前移动。我建议用下一个钩子,wp_loaded
相反,您可以自行决定更改:
function karmacoma_206593() {
$value = get_field( "text_field" );
if( $value ) {
echo $value;
} else {
echo \'empty\';
}
}
add_action( \'wp_loaded\', \'karmacoma_206593\' );
这里,我将您的代码放在一个函数中,并告诉WordPress在
init
事件/挂钩/动作。为了确保它不会与您拥有的任何其他代码冲突,我使用了您的用户名和此问题的ID作为函数名。
接下来,我们有两个您不知道的新问题。首先,你的if
报表检查可能更好。例如,如果您的值为false
, 您的检查将失败,即使它是有效值,因此我将使用empty
:
if( !empty( $value ) ) {
其次,您正在输出此字段的值,而不需要任何形式的转义。如果该字段的值是脚本标记怎么办?让我们通过使用来保护此代码
esc_html
要删除任何html标记,请执行以下操作:
echo esc_html( $value );
给我们这个:
function karmacoma_206593() {
$value = get_field( "text_field" );
if ( !empty( $value ) ) {
echo esc_html( $value );
} else {
echo \'empty\';
}
}
add_action( \'wp_loaded\', \'karmacoma_206593\' );