
به اشتراک بگذارید

به اشتراک بگذارید
آموزش وردپرس | بلاگ وبداده
نمایش محتوای یک برگه داخل نوشته وردپرس

| معیار | روش افزونه (Insert Pages) | روش کدنویسی (شورتکد دستی) |
|---|---|---|
| سطح مهارت لازم | مبتدی؛ بدون کد | متوسط تا حرفهای؛ نیاز به PHP |
| سرعت راهاندازی | بسیار سریع | کمی زمانبر |
| افزونهی اضافه | بله، یک افزونه | خیر |
| انعطاف و کنترل | خوب (با گزینههای آماده) | کامل (هرطور بخواهید) |
| ریسک خرابی سایت | کم | متوسط (خطای PHP) |
| مناسب چه کسی | اکثر کاربران | کاربران فنی و توسعهدهنده |
// حالا کافی است این شورتکد را داخل هر نوشته بنویسید:
[show_page id="123"]
// عدد 123 را با شناسهی برگهی خودتان جایگزین کنید.
// شناسهی برگه را در نوار آدرس هنگام ویرایش برگه، مقابل post= میبینید.Bash
functions.php قالبِ فرزند اضافه کنید. این تابع محتوای برگه را با شناسه میگیرد و با فیلتر the_content، بلاکها و شورتکدهای داخلش را هم درست پردازش میکند:// شورتکد ساده برای نمایش محتوای یک برگه داخل نوشته
// این کد را در functions.php قالب فرزند قرار دهید
function webdade_show_page( $atts ) {
$atts = shortcode_atts( array(
'id' => 0, // شناسه (ID) برگهای که میخواهید نمایش دهید
), $atts );
$page = get_post( (int) $atts['id'] );
// اگر برگه پیدا نشد یا منتشر نشده، چیزی نمایش نده
if ( ! $page || $page->post_status !== 'publish' ) {
return '';
}
// پردازش بلاکها و شورتکدهای داخل برگه با فیلتر the_content
return apply_filters( 'the_content', $page->post_content );
}
add_shortcode( 'show_page', 'webdade_show_page' );PHP[show_page id="123"] را بنویسید و عدد را با شناسهی برگهی خودتان جایگزین کنید. اگر بخواهید نسخهی کاملتری داشته باشید که هم نامک (slug) را بپذیرد و هم جلوی حلقهی بینهایت را بگیرد، از این کد استفاده کنید:// نسخهی پیشرفته: پشتیبانی از نامک (slug) و جلوگیری از حلقهی بینهایت
function webdade_show_page_advanced( $atts ) {
$atts = shortcode_atts( array(
'id' => 0,
'slug' => '',
), $atts );
// یافتن برگه بر اساس شناسه یا نامک
if ( ! empty( $atts['slug'] ) ) {
$page = get_page_by_path( sanitize_title( $atts['slug'] ) );
} else {
$page = get_post( (int) $atts['id'] );
}
if ( ! $page || $page->post_status !== 'publish' ) {
return '';
}
// جلوگیری از درج یک برگه داخل خودش (حلقهی بینهایت)
if ( get_the_ID() === $page->ID ) {
return '';
}
$content = apply_filters( 'the_content', $page->post_content );
return '<div class="embedded-page embedded-page-' . esc_attr( $page->ID ) . '">' . $content . '</div>';
}
add_shortcode( 'show_page', 'webdade_show_page_advanced' );PHPبهصورت مستقیم خیر. هستهی وردپرس شورتکد آمادهای برای درج کامل یک برگه در نوشته ندارد. برای این کار یا باید افزونهای مثل Insert Pages نصب کنید یا با چند خط کد در قالب فرزند یک شورتکد اختصاصی بسازید. البته قابلیت «الگوهای همگام» برای بازاستفاده از قطعهمحتوا بهصورت بومی وجود دارد.
Insert Pages نوشتهی Paul Ryan با بیش از ۴۰٬۰۰۰ نصب فعال و امتیاز ۴٫۸ از ۵، محبوبترین و بهروزترین گزینه است و تا وردپرس 7.0 آزمایش شده. هم بلاک گوتنبرگ دارد و هم شورتکد، و میتوانید حالت نمایش را (فقط محتوا، عنوان، یا هر دو) انتخاب کنید.
برای یافتن شناسه، برگه را برای ویرایش باز کنید و در نوار آدرس مرورگر عددی که مقابل post= آمده همان شناسه (ID) است. نامک (slug) هم بخش انگلیسیِ آدرس برگه است که در تنظیمات برگه در بخش «پیوند یکتا» دیده میشود.
با افزودن یک تابع کوتاه به functions.php قالب فرزند که با get_post محتوای برگه را میگیرد و با apply_filters روی the_content آن را پردازش میکند، سپس با add_shortcode یک شورتکد مثل show_page میسازید. کد کامل آن در همین مقاله آمده است.
شایعترین علت، «حلقهی بینهایت» است؛ یعنی برگهای را داخل خودش یا دو برگه را بهصورت متقابل در هم درج کردهاید و رندر تا اتمام حافظه ادامه مییابد. از نسخهی ضدحلقهی کد استفاده کنید و هرگز یک برگه را داخل خودش درج نکنید.
اگر بخشهای کاربردی و کوتاه (فرم، هشدار، معرفی خدمات) را درج کنید مشکلی نیست. اما تکثیر یک متن بلندِ اصلی در نوشتههای زیاد ممکن است سیگنال محتوای تکراری بدهد. برای متنهای اصلی و طولانی، بهجای درج مکرر از لینک داخلی استفاده کنید.
بله. مزیت اصلی همین است. چون هر بار محتوای زندهی برگه خوانده و نمایش داده میشود، با ویرایش برگهی اصلی، محتوا در تمام نوشتههایی که درجش کردهاید خودکار بهروز میشود.
Insert Pages یک برگه یا نوشتهی مستقل را (که خودش در سایت وجود دارد) درج میکند. الگوهای همگام یک قطعهبلاکِ ذخیرهشده را در چند جا بازاستفاده میکنند. اگر میخواهید یک برگهی واقعی را نشان دهید، Insert Pages یا شورتکد دستی مناسبتر است.