Why does Hamlet call Polonius a fishmonger?
In Act II, scene ii, of Hamlet, Polonius approaches Hamlet to incite a display of Hamlet's madness to be able to give confirmation and explanation of it to Queen Gertrude and King Claudius. When Polonius speaks, Hamlet calls him a fishmonger. A fishmonger is a person who sells fish.
While some contend that Hamlet uses this as a derogatory term to directly insult Polonius, Polonius does not react to it as an insult, thus does not take it as a derogatory term. All Polonius says is, "he knew me not at first; he said I / was a fishmonger: he is far gone [in his madness]." Remember that his opening query to Hamlet is, "Do you know me, my lord?" which is in and of itself an odd opening comment between people who have known each other from of old. Hamlet must certainly have realized that Polonius was testing the proposition that Hamlet was mad.
What Polonius does take as an insult is Hamlet's comment about his honesty: "I would you were so honest a man." Polonius's response is clearly one of surprise and shock that he would suggest a lack of honesty in Polonius's inner nature: "Honest, my lord!"
Although "fishmonger" has in recent times been compared to the word "pimp," suggesting Hamlet is verbally attacking Polonius for his ideas about and treatment of his daughter, Ophelia, there is no historical evidence that "fishmonger" had any such meaning in Early Modern English of the Renaissance.
In any case, Polonius certainly did not require that Ophelia associate with Hamlet in order to please the King. On the contrary, he warned her that she must not think of Hamlet, because he is a Prince and has duties to fulfill that do not include marrying merely for love.
... thus I did bespeak:
'Lord Hamlet is a prince, out of thy star;
This must not be:' and then I precepts gave her,
That she should lock herself from his resort,
Admit no messengers, receive no tokens.
Which done, she took the fruits of my advice;
This tells us the reason that Hamlet makes this intentionally ironical remark and calls Polonius a fishmonger is to (1) taunt him and tease him by saying something inexplicable; to (2) give more substance to his madness act; and to (3) express his contempt for Polonius's meddling in his family affairs. The primary reason he ironically calls Polonius a fishmonger is (4) so that he can express his disrespect for Polonius's honesty, or for what Hamlet perceives as his dishonesty: "I would you were so honest a man." This perception of dishonesty is Hamlet's suspicion or knowledge of being manipulated and spied on by Polonius.