How to perform multiple inserts into postgresql database in one query
It seems your tables are defined with a serial or identity column and you want to use the generated value from one insert as a foreign key in the next statement. This can indeed be done using a data modifying CTE combined with the returning clause:

with new_recipient as (
  insert into recipient
    (name, address) 
  values
    (name, address)
  returning recipient_id
), new_order as (
  insert into orders
     (recipient_id, total_price, total_quantity) 
  values
     ((select * from new_recipient), 2000, 20)
  returning order_id
)
insert into items 
  (order_id, item, price, quantity, total) 
values
  ((select * from new_order), 'item1', 230, 2, 260), 
  ((select * from new_order) , 'item2', 500, 2, 1000);




However this could also be done using three different insert statements:

into recipient
  (name, address) 
values
  (name, address);

insert into orders
   (recipient_id, total_price, total_quantity) 
values
   (lastval(), 2000, 20);

insert into items 
  (order_id, item, price, quantity, total) 
values
  (lastval(), 'item1', 230, 2, 260), 
  (lastval(), 'item2', 500, 2, 1000);


The function lastval() returns the most recently generated sequence number. So in the second insert that would be the recipient_idand in the third statement it would be theorder_id`.