请参阅下面我的短码脚本(打算打印下一个15分钟的时间间隔,例如,如果当前时间是9:01pm,它将打印9:15pm)。
然而,我成功地产生了正确的输出,因为我echo
ing<span id="webinartime"></span>
动态内容显示在我的WordPress内容区域的顶部,而不是在我键入快捷代码的位置。
阅读后我明白我需要return
我的价值是让它出现在正确的位置。。。然而return
ing结束了该函数,因此我错过了包含最终将插入正确时间值的javascript(javascript是检索用户本地时间所必需的)。
我想知道是否有办法在短代码中包含两个函数,或者以某种方式嵌套它们。。。改变我的方法等?
<?php
add_shortcode( \'now_plus_15_min\', \'now_plus_15_min\' );
function now_plus_15_min() {
// get current date & time
$current_date = date(\'d-M-Y g:i:s A\');
$current_time = strtotime($current_date);
// create new date & time that is the nearest next 15 minute interval
$frac = 900;
$r = $current_time % $frac;
$new_time = $current_time + ($frac-$r);
$new_date = date(\'d-M-Y g:i:s A\', $new_time);
// insert HTML which will be later affected by javascript
// this part is the issue! I need to return this, not echo...
// but returning ends the function before javascript can be run...
echo \'<span id="webinartime"></span>\';
echo "\\n";
// Modify the PHP new date & time to match the user\'s local time
// and insert it into above HTML
echo "<script>
var date = new Date(\'" . $new_date . " UTC\');
var NextWebinarTime = date.toLocaleString();
console.log(NextWebinarTime);
document.getElementById(\'webinartime\').innerHTML = NextWebinarTime;
</script>
";
}
?>
最合适的回答,由SO网友:Jazibobs 整理而成
您应该做的是创建一个变量来存储希望使用快捷码输出的所有HTML数据,然后使用return
. 您的代码如下所示:
<?php
// insert HTML which will be later affected by javascript
// this part is the issue! I need to return this, not echo...
// but returning ends the function before javascript can be run...
$html_out = \'<span id="webinartime"></span>\';
$html_out .= "\\n";
// Modify the PHP new date & time to match the user\'s local time
// and insert it into above HTML
$html_out .= "<script>
var date = new Date(\'" . $new_date . " UTC\');
var NextWebinarTime = date.toLocaleString();
console.log(NextWebinarTime);
document.getElementById(\'webinartime\').innerHTML = NextWebinarTime;
</script>
";
return $html_out;
}
?>
然而,如果您需要JavaScript作为响应的一部分,WordPress的最佳实践是将脚本排队。您可以在此处了解更多信息:
https://developer.wordpress.org/reference/functions/wp_enqueue_script/
此外,正如另一位用户已经指出的那样,没有必要为这个短代码使用JavaScript。PHP完全能够完成您需要输出给用户的所有计算。