请试一试。我没有测试它,所以请告诉我它是否有任何错误。基本上,它会在保存之前检查标题,并运行循环检查,以查看是否可以通过该标题获取帖子。如果可以,它将添加一个新后缀并继续尝试。
如您所见,您必须在$suffixes
数组以允许它继续计数。或者,您可以使用NumberFormatter
类别(如果可用)。
add_filter( \'wp_insert_post_data\' , \'filter_post_title\' , \'99\', 2 );
function filter_post_title( $data , $postarr ) {
if( !$postarr[\'ID\'] ) { // Publishing for the first time
$suffixes = array( \'Two\', \'Three\', \'Four\' );
$count = 0;
$original_title = $data[\'post_title\'];
$new_title = $original_title;
while( get_page_by_title( $new_title, \'object\', \'post\' ) ) {
$new_title = $original_title . " " . $suffixes[$count];
$count++;
}
$data[\'post_title\'] = $new_title;
}
return $data;
}
您可以用更少的变量来编写它,但我觉得这种方式更具可读性。
Edit:这样做的缺点是每次递增时都必须查询数据库。因此,要获得“五个”,需要五个查询。如果您开始让它计数到很高的数字,您将开始注意到保存过程需要更长的时间。在这种情况下,查询所有以当前标题开头的帖子,然后对其进行解析以找到当前编号会更有效。