有没有可能先退回内容,然后再继续做其他事情?

时间:2018-09-12 作者:Drewdavid

请参阅下面我的短码脚本(打算打印下一个15分钟的时间间隔,例如,如果当前时间是9:01pm,它将打印9:15pm)。

然而,我成功地产生了正确的输出,因为我echoing<span id="webinartime"></span> 动态内容显示在我的WordPress内容区域的顶部,而不是在我键入快捷代码的位置。

阅读后我明白我需要return 我的价值是让它出现在正确的位置。。。然而returning结束了该函数,因此我错过了包含最终将插入正确时间值的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>
";

}
?>

3 个回复
最合适的回答,由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完全能够完成您需要输出给用户的所有计算。

SO网友:ville6000

添加ob_start() 在函数顶部添加return ob_get_clean() 在函数的最后一行。

function this_is_example() {
    ob_start();
    echo "stuff";
    return ob_get_clean();
}

SO网友:Rajesh Kakkad

处理完该短代码的整个代码后,将显示该短代码的结果。PHP可以通过javascript完成您想要做的事情,因为它只是向元素添加信息。由于这两个计算都是通过PHP处理完成的,所以您只需回显完整的“webinartime”元素,而无需将该工作移交给javascript。从使用元素div或span等的内容中,可以从中删除,并让PHP代码显示已经填充了计算的内容。希望我能从你的描述中理解你的情况。

结束