Randomize attachment IDs

时间:2020-07-18 作者:Alex C.

我希望我的附件ID是随机的(不是顺序的)。就像什么this plugin 是,但用于附件。我试图查看插件的源代码,但它使用的过滤器不适用于附件。

因此,基本上这就是用户ID随机化插件所做的

if ( ! function_exists( \'dfx_random_user_id_user_register\' ) ) {

    /**
     * Randomizes the user_id for new created users
     *
     * @param array $data
     * @param bool $update
     *
     * @return array
     */
    function dfx_random_user_id_user_register( $data, $update ) {

        if ( ! $update )  {

            // Locate a yet-unused user_id
            do {
                $ID = random_int( 1, dfx_random_user_id_get_max_id() );
            } while ( get_userdata( $ID ) );

            $data += compact( \'ID\' );
        }

        return $data;
    }

}

add_filter( \'wp_pre_insert_user_data\', \'dfx_random_user_id_user_register\', 10, 2 );
是否有一种方法可以对附件ID执行类似的操作?

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

对于附件帖子,应执行以下操作,即使用wp_insert_attachment_data hook 随着get_post():

function my_random_post_id( $data, $postarr ) {

    // Runs if the post is being created and not updated.
    if ( empty( $postarr[\'ID\'] ) )  {

        // Locate a yet-unused ID in the (wp_)posts table.
        do {
            // Based on the dfx_random_user_id_get_max_id() function.
            $max_post_id = ( ( 9007199254740991 + 1 ) / 2 ) - 1;

            $ID = random_int( 1, $max_post_id );
        } while ( get_post( $ID ) );

        $data += compact( \'ID\' );
    }

    return $data;

}

add_filter( \'wp_insert_attachment_data\', \'my_random_post_id\', 10, 2 );
// The following is for non attachments.
//add_filter( \'wp_insert_post_data\', \'my_random_post_id\', 10, 2 );

相关推荐

Search with filters

我想在搜索表单中创建三个过滤器,其中包括三个不同的过滤器(标签、类别和帖子)。是否可以创建这些过滤器?如果可能的话,意味着我如何创建它?基本上,我不擅长PHP。所以,请帮我解决这个问题。谢谢