如果我设置帖子 ID wp_revisions_to_keep过滤器不起作用



我想限制30天内未修改的帖子的修改次数为2。

我有以下功能:

add_filter( 'wp_revisions_to_keep', 'limit_revisions', 10, 2 );
function limit_revisions( $num, $post ) {
$num = 2;
if ( get_the_modified_time( 'U', $post->ID ) + MONTH_IN_SECONDS >= current_time( 'U' ) ) {
$num = -1;
}
return $num;
}

它返回一个正确的$num值,但如果我更新旧的帖子,它不会删除旧的版本。

如果我从get_the_modified_time函数中删除$post->ID,它就像预期的那样工作,但我不明白为什么。设置id作为这个函数的参数是什么错误,它使过滤器不工作?

正如用户Fresz指出的那样,您不需要将$num传递给limit_revisions函数。

如果您查看wp_revisions_to_keep: https://developer.wordpress.org/reference/functions/wp_revisions_to_keep/的文档,您会注意到它接受一个参数:post

在你当前的设置中,你有limit_revisions( $num, $post )-这意味着$num实际上是post-因为你先传递它。

你可以这样重构你的代码:


add_filter( 'wp_revisions_to_keep', 'limit_revisions');
// Pass only post
function limit_revisions( $post ) {
$num = 2;
if ( get_the_modified_time( 'U', $post->ID ) + MONTH_IN_SECONDS >= current_time( 'U' ) ) {
$num = -1;
}
return $num;
}

最新更新