你会惊讶于这一点有多么棘手。我最接近的是save_post
行动似乎没有可以挂接的操作可以阻止帖子保存,所有操作update_post()
和write_post()
不允许任何直接干扰;因此,我想出的一个简单而快速的选择就是在钩子里死。即便如此,这篇文章还是用了重复的名字保存了下来,不管我们是如何死去的。
function check_post_title( $pid ) {
$post = get_post( $pid );
$events = get_posts( \'s=\'.$post->post_title.\'&post_type=event\' );
foreach( (array)$events as $event ) {
if ( $event->ID == $post->ID ) continue;
if ( $event->post_title == $post->post_title ) die(\'Oh noes! A post with this title already exits, go back and change it, please.\');
}
}
add_action( \'save_post\', \'check_post_title\' );
The
save_post
操作为挂钩提供保存的帖子的帖子ID。然后使用\'s\'参数搜索事件,就像在页面上使用常规WordPress搜索一样。然后遍历事件,如果发现ID不是checked-on-post的post的标题与该checked-on-post匹配,则该post将终止。
在发布帖子时,一些更有用、更精简的内容会涉及到一条自定义消息。
function check_post_title( $pid ) {
$post = get_post( $pid );
$events = get_posts( \'s=\'.$post->post_title.\'&post_type=event\' );
foreach( (array)$events as $event ) {
if ( $event->ID == $post->ID ) continue;
if ( $event->post_title == $post->post_title ) {
add_filter( \'redirect_post_location\', \'event_exists\' );
}
}
}
/* Alter the message */
function event_exists( $redirect_url ) {
$messages = array( \'message=1\', \'message=2\' );
return str_replace( $messages, \'message=100\', $redirect_url );
}
/* Add a custom event message */
function custom_event_message( $messages ) {
$messages[\'post\'][\'100\'] = \'Oh noes! An event with this name already exists, so go ahead and pick another.\';
return $messages;
}
add_filter( \'post_updated_messages\', \'custom_event_message\' );
add_action( \'save_post\', \'check_post_title\' );
这是一个快速的解决方案,更复杂的事情可能会要求刚刚违反无重复标题规则的保存帖子必须修改标题并由函数重新保存,将其转换为类似“重复![此处的标题]”并将帖子状态更改回“待定”。
黄色的信息似乎很微妙,出版商可能没有注意到,死亡似乎更吸引人。
希望这有帮助,不要让你太困惑。这个问题可能有更好的解决方案,希望有人能来帮助我们改进解决方案。此时,任何想法都将受到赞赏。