Please explain the void loop() section of the sketch
The transmitter transfer date array of [60] like: 523 | 487, here " int commands[30];" just 30, is it OK?


If you have a maximum of 59 characters (59 printable characters plus the NULL at the end equals 60), and each number is separated by a | character, then the maximum possible numbers you can have, if they are all single digit, is 30. So yes, an array of 30 integers is fine.


  " if(char(buf[i]) == '|') / commands[column] = message.toInt();", seems just convert the date before '|'?


Yes. It takes whatever has been placed in message and converts it to an integer, then empties message ready for the next number.


  what is the result of " message += char(buf[i]);"? Thanks


It adds the current character from the buffer (pointed to by i) to the end of the message string.

It's not the best way of doing it, and it can make a mess of your heap causing your Arduino to crash after a while.

Personally I would use strtok() directly on the buffer:

int i = 0;
char *part = strtok(buffer, "|");
while (part) {
    command[i] = atoi(part);
    i++;
    part = strtok(NULL, "|");
}


This of course assumes that buffer is properly NULL terminated.