使用批量编辑时添加要删除的术语的SAVE_POST挂钩

时间:2018-03-23 作者:Michael Rogers

我有一个功能,可以自动将每个帖子标题的第一个字母添加为一个名为“索引”的分类法上的术语。代码如下:

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 “编辑”并再次更新,它会将其添加回(如预期的那样)。

但为什么在进行批量编辑时要删除该术语?

非常感谢您的帮助。

1 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

不确定是什么具体问题导致了这种情况,但您所做的错误是假设全局变量的存在,在这种情况下$_POST[\'post_title\']. 并不是所有更新帖子的东西都会设置它。

正确的方法是使用传递给钩子的第二个变量,或者通过执行$post = get_post($post_id) 和替换$_POST[\'post_title\'] 具有$post->post_title

结束

相关推荐

Wordpress Admin Tooltip hooks

我想知道是否有一种方法可以使用Wordpress管理工具提示(灰色和蓝色),当你更新你的Wordpress(3.x)时会显示这些提示。显示新功能。谢谢