王氏出身于中下级军官家庭,父亲王朝窭,在女儿未被选入宫之前考中武举人,官任锦衣卫百户(正六品)。隆庆二年,也即王氏3岁时,家从左卫迁到京城。王氏生于嘉靖四十四年正月二十七日寅时。万历初年,朝廷为明神宗皇帝大婚,在民间大范围选美,13岁的王氏顺利通过前几关选美入宫,但是没能进入前三名。选美前三名中的王喜姐被钦定为皇后,另两位女子分别册为刘昭妃(宣懿太妃)、杨宜妃。落选的女子一部分按规矩遣返回乡、一部分条件较为出色者则留宫成为宫女。王氏就是在这种情况下,于万历六年二月初二日(1578年)分配到慈宁宫,侍奉明神宗的生母李太后(孝定太后)。
三年后,16岁的王宫女偶然被皇帝遇见,"私幸之",事后赏给她一付头面(首饰)。王宫女因此怀了身孕,但不敢明言。后因身形变化被李太后看破。太后召问神宗,神宗最初想赖账,假装不知道,拒绝承认。
按照明朝宫廷规矩,皇帝的起居有专人记录在册,叫《起居注》。太后命人拿来《起居注》,对照当时日期,神宗只好勉强承认了。不过太后并没有责备他,反而安慰说:“我老了,还没有孙子,如果生个男孩,也算祖宗社稷之福。是谁生的,不必计较,你可以加封她”。王宫女因此进封为恭妃。万历十年八月十一日(1582年),王恭妃不负重望,果然生了个男孩,这就是神宗的庶长子朱常洛。
王恭妃先后生一子一女,实际却并不受宠,最受宠的是九嫔之一的郑淑嫔。万历十四年(1586年)正月,郑氏生皇三子朱常洵,神宗进封郑氏为皇贵妃。这就在立太子的问题上引出了麻烦。按照中国封建时代一贯的制度:“有嫡立嫡,无嫡立长”,在皇后没有生育嫡子的情况下,应立庶出的长子(或年纪最大的儿子)做皇太子,神宗自己当年就是因为这个原因轻松获得皇位的。王恭妃生的朱常洛是庶长子,自然也应是皇太子。群臣和李太后都支持立朱常洛为太子,可是神宗不喜欢王氏母子,郑贵妃又总想立自己的儿子为太子。因此立太子的问题,迟迟不能进行。