با سلام
برای حل مشکل دستور \label
را بعد از \caption
قرار دهید. دقت کنید که label باید حتما بعد از caption و یا در درون محیط آن باشد.
\begin{figure}[h!]
\centering
\caption{نمونه}
\label{th}
\end{figure}
نکات:
الف) فایل شما یکم شلوغ بود. به عنوان مثال ارسال یک فایل با محتوای زیر
\documentclass{report}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{graphicx}
\usepackage{xepersian}
\settextfont[Scale=1.1]{XB Niloofar}
\begin{document}
در \ref{th}
\begin{figure}
\rule{3cm}{3cm}
\label{th}
\caption{نمونه}
\end{figure}
\end{document}
برای نشان دادن مشکل شما کافی بود. اگر سعی کنید تا حد ممکن فایل شما کوچکتر باشد، دوستان سریع تر و راحتتر می توانند به سوالات شما پاسخ دهند.
ب) پیوند زیر را نیز مطالعه کنید.
the order of \caption and \label matters in floats
ج) در فایل شما بسته zref-perpage بعد از بسته xepersian فراخوانی شده بود.
\usepackage{xepersian}
\settextfont[Scale=1.1]{Yas}
\setdigitfont[Scale=1.1]{PGaramond}
\usepackage{zref-perpage}
این کار ظاهرا درست نیست. تمامی بسته ها باید قبل از بسته xepersian فراخوانی شود.