Php 如何通过我的插件页面运行函数并在同一页面上打印结果
我目前正在尝试向我的网站添加调试页面。这个页面只用于运行我的插件完成的一些任务,并在同一页面上输出一些结果 我目前在Wordpress管理员中有一个单独的页面,该页面包含一个表单和按钮,该表单和按钮应链接到一个函数,该函数将执行各种步骤,然后返回一个必须在该页面上打印的值 以下是页面和按钮的当前代码:Php 如何通过我的插件页面运行函数并在同一页面上打印结果,php,wordpress,Php,Wordpress,我目前正在尝试向我的网站添加调试页面。这个页面只用于运行我的插件完成的一些任务,并在同一页面上输出一些结果 我目前在Wordpress管理员中有一个单独的页面,该页面包含一个表单和按钮,该表单和按钮应链接到一个函数,该函数将执行各种步骤,然后返回一个必须在该页面上打印的值 以下是页面和按钮的当前代码: function actu_admin_menu_option() { add_menu_page('Scripts', 'Sahar actus plugin', 'manage_opt
function actu_admin_menu_option()
{
add_menu_page('Scripts', 'Sahar actus plugin', 'manage_options', 'actu-admin-menu', 'actu_scripts_page', '', 200);
}
add_action('admin_menu', 'actu_admin_menu_option');
// HTML page of the plugin
function actu_scripts_page()
{
?>
<div class="wrap">
<h2>Sahar actus plugin</h2>
<form action="<?php echo admin_url('admin-post.php'); ?>" method="post">
<input type="hidden" name="action" value="start_test">
<input class="button button-primary" type="submit" value="Start test">
</form>
</div>
<?php
}
function start_test()
{
return ("test started!");
}
add_action( 'admin_post_start_test', 'start_test' );
所以当我按下按钮时,我想开始测试!要在页面上打印,当前单击按钮会将我重定向到/wp admin/admin-post.php,这是一个空白页面
我不知道做这件事的最佳做法是什么,我应该在我的按钮上发出ajax请求来运行函数,然后从ajax调用中获取返回值吗?还是有更好的办法
谢谢你帮助我,祝你有美好的一天
编辑:更新代码,没有错误,但输出仍然没有打印到页面或控制台
function actu_scripts_page()
{
?>
<div class="wrap">
<h2>Sahar actu plugin</h2>
<form action="" method="post">
<?php wp_nonce_field('do_test', '_test_nonce') ?>
<input type="hidden" name="action" value="start_test">
<input class="button button-primary" type="submit" value="Start test">
</form>
</div>
<?php
if (isset($_POST['start_test'])) {
if (isset($_POST['start_test'])) {
if (!wp_verify_nonce($_POST['_test_nonce'], 'do_test')) {
// error in nonce
} else {
start_test();
}
}
}
?>
<?php
}
function start_test()
{
echo("hhhhh");
die(); // tried with and without, no difference
}
add_action('admin_post_start_test', 'start_test');
通过/wp admin/admin-post.php发生重定向,将返回上一屏幕 您的结果将打印在此页面上,由于它正在重定向,您将看不到任何内容 要解决此问题,只需在调试代码后添加以下内容:
die();
或
这将阻止PHP在代码之后执行任何操作。因此,停止页面重定向。此外,任何在函数之后运行的函数都不会正常运行,因此,如果您希望保存,例如,在这段代码之后就不会发生这种情况。有两种方法可以实现这一点,两者都可以,这取决于您希望的用户体验。使用现有的标准http表单提交,或者使用ajax。标准表单提交是最简单的方法 使用您现有的标准方法提交表单,这将重新加载页面。重要提示:如果要将页面提交给自己,最好将action属性保留为空,如action=。 您还需要使用wp\u nonce\u字段将nonce添加到表单中,并使用wp\u verify\u nonce在提交块中检查其值 因此,您的表单需要如下内容:
<form action="" method="post">
<?php wp_nonce_field('do_test', '_test_nonce') ?>
<input type="hidden" name="action" value="start_test">
<input class="button button-primary" type="submit" value="Start test">
</form>
添加一个php块以检查表单是否已提交,并在其中执行脚本,使用php打印任何输出
function start_test() {
// do things. If successful, return true. Otherwise return false
return true;
}
if( isset($_POST['start_test']) ) {
if( ! wp_verify_nonce( $_POST['_test_nonce'], 'do_test' ) {
// error in nonce
} else {
if( start_test() )
echo '<p>Success!</p>';
else
echo '<p>Failure!</p>';
}
}
谢谢你澄清了做这件事的方法!我已经试过你的代码,它运行了,但没有在页面或控制台上打印任何内容,我会将代码粘贴回原始帖子中,如果你仍然能帮我一点忙,我将不胜感激!谢谢你的帮助,我来自其他语言,即使是最基本的事情也很难开始做。那是因为你的函数只是返回文本,没有任何回音!谢谢,通过你的例子,我学到了很多关于它是如何工作的!遗憾的是,在使用您的示例后,它仍然没有打印任何内容,也许这工作正常,但由于页面的加载方式而没有显示?我试着按照Ali_K在回答中的建议,在每一步中加入骰子,但效果并不理想。也许我设置菜单页面的方式不正确?它可能正在打印到页面上,但你就是看不到它,因为它在元素后面。将结束标记移动到条件isset块之后。感谢您的回答,我尝试将die与JakeParis提供的代码结合使用,但它仍然没有向页面输出任何内容。
<form action="" method="post">
<?php wp_nonce_field('do_test', '_test_nonce') ?>
<input type="hidden" name="action" value="start_test">
<input class="button button-primary" type="submit" value="Start test">
</form>
function start_test() {
// do things. If successful, return true. Otherwise return false
return true;
}
if( isset($_POST['start_test']) ) {
if( ! wp_verify_nonce( $_POST['_test_nonce'], 'do_test' ) {
// error in nonce
} else {
if( start_test() )
echo '<p>Success!</p>';
else
echo '<p>Failure!</p>';
}
}