I found that WordData[word,"Hyphenation"] usually divides words into syllables correctly, with three caveats. The word must have hyphenation info in WordData, some short 2-syllable words are returned without a hyphenation division, and some words are too short to hyphenate.
WordData[#, "Hyphenation"] & /@ {"wished", "over", "of"}
{Missing["NotAvailable"], {"over"}, Missing["NotAvailable"]}
It is possible to overcome these issues. If you absolutely need syllable information for every word, then I recommend that you begin with WordData[word,"Hyphenation"]. Then retrieve WordData[word,"PhoneticForm"]. This gives the International Phonetic Alphabet version of the word, if it is available. The number of syllables will correspond to the number of vowel sounds in the word. In the case of words like "over", this will be more accurate.
ipaVowels = {"a?", "a?", "e?", "??", "o?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "a", "æ", "e", "i", "o", "", "ø", "u", "y"};
phon = WordData[#, "PhoneticForm"] & /@ {"wished", "over", "of"};
{#, StringCount[#, ipaVowels]} & /@ phon
{{"w???t", 1}, {"?o?v?", 2}, {"??v", 1}}
Words that are not in WordData or have neither hyphenation nor phonetic values can be dealt with in a crude counting of likely vowel sound letter combinations. In other words, the word "Lenore" likely contains two syllables because of the arrangement of vowels, final -e usually being silent.
I recommend that you check out my post from last week entitled "Computer Analysis of Poetry Part 1: Metrical Pattern" for an extensive example.
I think that my approach can be improved upon even more by the use of machine learning, using WordData values for training data.
Hopefully this gave you enough information to decide which approach will work for you.