发布/更新/保存帖子时,WordPress会触发许多不同的挂钩。通常,最好是浏览Codex,以确定在您想要运行自定义代码时,以及仅在您想要运行自定义代码时,哪个钩子才会触发。重要的是要知道,当你点击一个按钮时,其中一些钩子会多次触发。
在大多数情况下,您不能运行var_dump()
, 因此,在每个钩子上添加一个测试函数通常很有帮助,在该测试函数中,fwrite到日志文件中,包括时间戳和钩子运行的位置。这样,您就可以看到事情的顺序以及每个钩子运行的次数,并开始缩小单个位置来运行自定义代码。
您可能想探索的一个钩子:save_post. 这个钩子允许您访问post ID,即完整的WP$post
对象,以及一个布尔值,用于判断这是否是正在更新的现有帖子。
所以,要测试save_post
胡克,你可以从
add_action(\'save_post\', \'wpse_see_save_post\', 20, 3);
function wpse_see_save_post($post_id, $post, $update) {
// Open a log file and add to it ("a")
$file = fopen(__DIR__.\'/save-post-hook.log\', \'a\');
// Get the current timestamp
$time = date("Y-m-d h:m");
// Write timestamp and message to file
fwrite($file, "$time - save_post ran");
fclose($file);
}
您可能还想记录一些其他挂钩,例如
transition_post_status
和
post_updated
- 甚至可能是同一个日志文件,这样您就可以看到事情的完整顺序以及可用的内容。
一旦知道事情发生的顺序,就可以开始访问数据。例如:
add_action(\'save_post\', \'wpse_see_save_post_data\', 20, 3);
function wpse_see_save_post_data($post_id, $post, $update) {
// Open a log file and add to it ("a")
$file = fopen(__DIR__.\'/save-post-data.log\', \'a\');
// Get the current timestamp
$time = date("Y-m-d h:m");
// Write timestamp and message to file
fwrite($file, "$time - save_post data includes\\r\\n");
// access global $_POST array
global $_POST;
fwrite($file, print_r($_POST, true));
fclose($file);
}
您可能会注意到,$\\u POST数据在一次运行时为空,但在另一次运行时填充。因此,您可以在函数中添加一个条件,如
if(count($_POST) > 0) {
只有当您知道自己有权访问所需的数据时,才能运行自定义代码。