我正在Wordpress插件上添加一些功能,点击后需要通过ajax调用一些短代码。
我第一次尝试的是在我的函数中调用ajax处理内部的短代码。php文件:
add_action( \'wp_ajax_nopriv_showads\', \'showads\' );
function showads(){
echo do_shortcode(\'[myshortcode]\');
wp_die();
}
在这里,我将在ajax调用的响应中移动短代码的输出。此短代码根本没有执行。
因此,在对插件中的“wp\\u localize\\u script”函数进行了一些研究之后,我将其称为shortcode:
wp_localize_script( \'script-handle\', \'ajax_object\',
array(\'ajaxurl\' => admin_url( \'admin-ajax.php\' ),
\'adspace\' => do_shortcode( \'[myshortcode]\' )
));
作为对ajax的响应,我将移动短代码的输出。
目前我遇到的问题是,只要调用“wp\\u localize\\u script”函数,短代码的输出(它应该创建一个谷歌广告)就会被全部删除。
我想知道,如果我试图以错误的方式解决整个问题,是否有办法不剥离短码输出或提供建议。
SO网友:Naresh Kumar P
从必须使用的函数返回时ob_start()
和ob_get_clean()
然后你可以独自在你需要的地方得到结果。
ob_start():
ob_start
— 打开输出缓冲
此功能将打开输出缓冲。当输出缓冲处于活动状态时,不会从脚本发送任何输出(标头除外),而是将输出存储在内部缓冲区中。
输出缓冲区是可堆叠的,也就是说,当另一个ob\\u start()处于活动状态时,可以调用ob\\u start()。只需确保调用ob\\u end\\u flush()的次数适当。如果多个输出回调函数处于活动状态,则输出将按嵌套顺序依次通过每个输出回调函数进行过滤。
ob_get_clean():
ob_get_clean
— 获取当前缓冲区内容并删除当前输出缓冲区
ob_get_clean()
基本上执行两个ob_get_contents()
和ob_end_clean()
.
输出缓冲区必须由启动ob_start()
具有PHP_OUTPUT_HANDLER_CLEANABLE
旗帜否则ob_get_clean() will not work
.
Example:
function event_form()
{
ob_start();
include(\'event_form.php\');// You can include or print the short-code over here
$output = ob_get_clean();
return $output;
}