ویژگی تصویر

آموزش تابع get_adjacent_post() در وردپرس و کاربرد آن

  /  وردپرس   /  تابع get_adjacent_post در وردپرس
بنر تبلیغاتی الف
wp - wordpress - وردپرس

تابع get_adjacent_post() یکی از توابع مفید وردپرس برای گرفتن پست مجاور (قبلی یا بعدی) نسبت به پست جاری است. این تابع به شما اجازه می‌دهد تا بدون استفاده از حلقه‌های پیچیده، پست قبلی یا بعدی را بر اساس تاریخ، دسته‌بندی یا هر تکسونومی دلخواه پیدا کنید و اطلاعات آن را برای نمایش لینک، عنوان، تصویر شاخص و غیره استفاده کنید.

امکانات و کاربردهای رایج

  • نمایش لینک «پست قبلی» و «پست بعدی» در قالب سایت
  • نمایش پست مجاور در همان دسته/تگ (in_same_term)
  • حذف دسته‌ها یا تگ‌های خاص از نتایج (excluded_terms)
  • استفاده با انواع پست سفارشی (custom post types) و تکسونومی‌های دلخواه

امضای تابع و پارامترها

پارامترنوعتوضیح
in_same_termboolاگر true باشد، جستجو فقط در همان تکسونومی (پیش‌فرض category) انجام می‌شود.
excluded_termsstring|arrayآی‌دی‌های تکسونومی که باید حذف شوند (مثلاً ‘5,10’).
previousboolاگر true باشد پست قبلی (قدیمی‌تر) برگردانده می‌شود، اگر false پست بعدی (جدیدتر).
taxonomystringنام تکسونومی برای مقایسه (پیش‌فرض ‘category’).

مقدار بازگشتی

تابع یک شیء WP_Post برمی‌گرداند یا در صورت عدم وجود پست مجاور مقدار null. این مقدار معمولاً برای ساخت لینک، گرفتن عنوان و تصویر شاخص استفاده می‌شود.

مثال‌های عملی

۱) گرفتن پست قبلی ساده و نمایش لینک

$prev = get_adjacent_post( false, '', true );
if ( $prev ) {
    echo '<a href="' . get_permalink( $prev->ID ) . '">' . esc_html( get_the_title( $prev->ID ) ) . '</a>';
}

توضیح: این کد پست قبلی در همان نوع پست (post_type فعلی) را بدون محدودیت تکسونومی برمی‌گرداند. سپس اگر شیء موجود بود، لینک به آن چاپ می‌شود. get_permalink و get_the_title با شناسه پست مورد استفاده قرار گرفته‌اند تا از اطلاعات دقیق پست جدید استفاده شود.

۲) پست مجاور در همان دسته

$prev_in_cat = get_adjacent_post( true ); // in_same_term = true
if ( $prev_in_cat ) {
    echo '<a href="' . get_permalink( $prev_in_cat->ID ) . '">' . esc_html( get_the_title( $prev_in_cat->ID ) ) . '</a>';
}

توضیح: با قرار دادن پارامتر اول true، جستجو محدود به همان دسته (category) می‌شود. پارامترهای دیگر به صورت پیش‌فرض خالی هستند؛ بنابراین این تابع پست قبلی از همان دسته را می‌یابد.

۳) نادیده گرفتن یک یا چند دسته

$next_excluding = get_adjacent_post( false, '5,10', false ); // excluded_terms = '5,10', previous = false (next)
if ( $next_excluding ) {
    echo '<a href="' . get_permalink( $next_excluding->ID ) . '">' . esc_html( get_the_title( $next_excluding->ID ) ) . '</a>';
}

توضیح: در این مثال excluded_terms به صورت رشته ‘5,10’ استفاده شده تا دسته‌های با شناسه 5 و 10 از نتایج حذف شوند. پارامتر previous=false به معنی گرفتن پست بعدی (جدیدتر) است.

۴) استفاده از تکسونومی دلخواه (مثلاً product_cat برای ووکامرس)

$adj = get_adjacent_post( true, '', true, 'product_cat' );
if ( $adj ) {
    echo '<a href="' . get_permalink( $adj->ID ) . '">' . esc_html( get_the_title( $adj->ID ) ) . '</a>';
}

توضیح: اگر برای انواع پست سفارشی از تکسونومی‌ای غیر از category استفاده می‌کنید، آن نام را به پارامتر چهارم پاس دهید. این کد پست قبلی را در همان دسته‌بندی محصول پیدا می‌کند.

نکات پیشرفته و بهینه‌سازی

  • get_adjacent_post بر اساس تاریخ (post_date) جستجو می‌کند؛ بنابراین اگر از ترتیب‌های سفارشی استفاده می‌کنید، باید راهکار دیگری مثل WP_Query با date_query یا متای سفارشی در نظر بگیرید.
  • وقتی in_same_term=true باشد، تابع JOIN و WHERE اضافی روی جدول term_relationships انجام می‌دهد که ممکن است روی سایت‌های بزرگ اندکی کند باشد؛ برای صفحات با ترافیک بالا می‌توانید از یک WP_Query به‌ینه یا cache استفاده کنید.
  • تابع به post_type فعلی احترام می‌گذارد؛ بنابراین با custom post typeها هم کار می‌کند اگر از داخل حلقه پست مربوطه فراخوانی شود یا global $post تعریف شده باشد.
  • برای نمایش راحت‌تر می‌توانید از تابع‌های کمکی get_previous_post() و get_next_post() که روی get_adjacent_post() سوار هستند، استفاده کنید.

نمونهٔ پیشرفته: نمایش تصویر شاخص و خلاصه

$prev = get_adjacent_post( true ); // previous in same category
if ( $prev ) {
    $url = get_permalink( $prev->ID );
    $title = get_the_title( $prev->ID );
    $thumb = get_the_post_thumbnail( $prev->ID, 'thumbnail' );
    $excerpt = wp_trim_words( get_post_field( 'post_content', $prev->ID ), 20 );
    echo '<div class="adjacent-post prev">';
    echo '<a href="' . esc_url( $url ) . '" title="' . esc_attr( $title ) . '">';
    echo $thumb;
    echo '<h4>' . esc_html( $title ) . '</h4>';
    echo '<p>' . esc_html( $excerpt ) . '</p>';
    echo '</a>';
    echo '</div>';
}

توضیح: این قطعه علاوه بر لینک عنوان، تصویر شاخص و یک خلاصه کوتاه از محتوای پست مجاور را نشان می‌دهد. از get_post_field برای گرفتن محتوای پست و wp_trim_words برای کوتاه‌سازی متن استفاده شده است. همچنین از توابع هدایتگر خروجی مثل esc_url و esc_html جهت جلوگیری از مشکلات امنیتی بهره گرفته شده است.

جمع‌بندی

تابع get_adjacent_post() یک ابزار ساده اما قدرتمند برای پیمایش بین پست‌ها بر اساس تاریخ و تکسونومی است. با درک پارامترها و تاثیرات آن‌ها (مثل in_same_term و excluded_terms) می‌توانید تجربهٔ کاربری بهتری در قالب ایجاد کنید—از نمایش لینک‌های ساده تا کارت‌های پیشرفته با تصویر و خلاصه. در سایت‌های بزرگ مراقب هزینهٔ پرس‌وجوهای اضافی باشید و در صورت نیاز از کش یا کوئری‌های سفارشی بهره بگیرید.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: