Is he getting enough sleep? My son won't eat because he is too tired and cranky at dinnertime.
My son started giving up his nap at 25 months, and almost never takes a nap now that he is 3, but by dinner time he is too tired and cranky to want to eat. I usually get a few bites down him.
I wouldn't worry about PB&J and pizza too much. You can try and make those things healthier. Like use whole wheat bread, peanut butter made with JUST peanuts, an all fruit spread instead of jelly that's mostly refined sugars.
I was picky and my mother use to tell me I was going to turn into a grilled cheese sandwhich.
Sometimes I use a barter system if he wants something in particular. Like if he want a piece of bread, he has to take a bite of something else for every bite of bread, and I hold the bread.
Also, I think the best idea, if he eats the other meals better like my son, is save his dinner for the next day at lunch. Then heat his dinner up for lunch, and let him have the PB&J for dinner.