Как лучше писать код плагина на wordpress процедурным или ООП?
Рекоммендуется / best practice - ООП. Какие паттерны юзать - дело ваше. Синглтоны - весьма спорный подход, одни  оторваться от него не могут, других тошнит. 
Но ООП только для больших плагинов. Например, если пишется много кастомного функционала для сайта (в виде плагина/ов), или один нишевый относительно большой плагин, используем ООП. Если плагин небольшой и не сложный - процедурно. Нет смысла строить многоэтажку там, где достаточно хижины на берегу.
И в любом случае, если плагин подразумевает удобные методы вывода контента / результатов его работы в шаблоны, то стоит писать свои template tags для удобства конечных пользователей - хорошая практика. Им существенно проще использовать привычный формат, например, кастомная функция my_get_post_views(), которая выводит количество просмотров поста, вместо вызова метода класса. Сама функция, в свою очередь, является только оберткой для этого вызова, но простым пользователям так понятнее и удобнее.
Ну если плагин не большой то можно и процедурно. Если заказчик хочет то деваться некуда.
Я все же перешел на ООП. если код оформлен отдельными классами потом легче его использовать в других плагинах.