我有一个功能,可以自动将每个帖子标题的第一个字母添加为一个名为“索引”的分类法上的术语。代码如下:
function save_index( $post_id ) {
if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) {
return;
}
$slugs = array(\'product1\', \'product2\', \'product3\');
$letter = \'\';
// only run for post types selected
if ( isset( $_POST[\'post_type\'] ) && ( !in_array($_POST[\'post_type\'], $slugs) ) ) {
return;
}
// Check user capabilities
if ( ! current_user_can( \'edit_post\', $post_id ) ) {
return;
}
$taxonomy = \'index\'; // our custom taxonomy
if ( isset( $_POST[\'post_type\'] ) ) {
// Get the title of the post
$title = $_POST[\'post_title\'];
// Get the first letter of the title
$letter = substr( $title, 0, 1 );
// Set to 0-9 if it\'s a number
if ( is_numeric( $letter ) ) {
$letter = \'0-9\';
}
}
// set term as first letter of post title, lower case
wp_set_object_terms( $post_id, $letter, $taxonomy );
}
add_action( \'save_post\', \'save_index\' );
这是一个相当简单的代码,但是它做了一些意想不到的事情:当我在仪表板上选择一篇文章并执行以下操作时
bulk 编辑并更新,WordPress会删除索引项。
当我这样做的时候”quick “编辑”并再次更新,它会将其添加回(如预期的那样)。
但为什么在进行批量编辑时要删除该术语?
非常感谢您的帮助。
最合适的回答,由SO网友:Mark Kaplun 整理而成
不确定是什么具体问题导致了这种情况,但您所做的错误是假设全局变量的存在,在这种情况下$_POST[\'post_title\']
. 并不是所有更新帖子的东西都会设置它。
正确的方法是使用传递给钩子的第二个变量,或者通过执行$post = get_post($post_id)
和替换$_POST[\'post_title\']
具有$post->post_title