یکی از خطاهای شایعی که در حین کار با سیستم مدیریت محتوای وردپرس ممکن است که با ان مواجه شوید، خطای Parser error – syntax error نام دارد. این خطا که به دلایل مختلفی احتمال وقوع آن وجود دارد. به حالات زیر قابل مشاهده می باشد.
1 |
Parse error- syntax error, unexpected $end in /public_html/site1/wp-content/themes/afzoneha-themes/functions.php on line 278 |
1 |
Parse error- syntax error, unexpected $end in /public_html/site1/wp-content/themes/iran-themes/functions.php on line 758 |
علت وقوع این خطا:
این خطا در PHP دقیقا به این علت بوجود می آید که ما در کدهایی که در فایل فانکشن قالب یا افزونه های بکارگرفته شده استفاده کرده ایم، سهواً یا شاید هم عمداً (!) اشتباهاتی داشته ایم، این اشتباهات مربوط کدنویسی توابعی ست که در حین کار به آن مرتکب شدیم. که با بررسی خطا و شماره خط و مسیری که ارور به آن اشاره میکند میبایست مشکلش را شناسایی و مسئله را مرتفع کنیم.
حال به حالاتی که ممکن است در حین کدنویسی دچار اشتباه برنامه نویسی شده باشیم اشاره میکنیم. طبیعتا با بررسی این موارد از وقوع خطای فوق جلوگیری بعمل خواهد آمد.
راه حل خطا:
حالت احتمالی اول: گاهاً پیش می آید وردپرس کاران عزیز زمانی که اقدام به اضافی کردن یک فانکشن دلخواه به قالب خود میکنند. کدهای مربوط به function را به اشتباه درون تگهای یک فانکشن دیگر قرار میدهند. همین مسئله خود موجب بروز خطای سینتکس میگردد. به این علت که شما یک تابع خارجی (خارج از ساختار قالب خود) را درون توابع در حال اجرای قالب خود (یعنی مابین تگ های باز و بسته یک تابع فعال) جایگذاری کرده اید. که خب این مسئله به خودی خود باعث ایجاد خطا میگردد.
به منظور تشریح توضیحات بالا با یک مثال عملی به بیان مسئله میپرداریم:
فرض کنید یک تابع به شکل زیر در قالب خود بصورت فعال و در حال کار داریم.
1 2 3 4 |
function uyrh0te_get_attachment( $attachment_id ) { $attachment = get_post( $attachment_id ); return array( 'alt' => get_post_meta( $attachment->ID, '_uyrh0te_attachment_image_alt', true ), 'caption' => $attachment->post_excerpt, 'description' => $attachment->post_content, 'href' => get_permalink( $attachment->ID ), 'src' => $attachment->guid, 'title' => $attachment->post_title ); } |
همانطور که مشخص هست این کد با تگ function uyrh0te_get_attachment( $attachment_id ) { و با تگ } پایان می یابد. حالا فرض کنید قصد داریم یک کد دلخواه در قالب خود اضافی کنید. و در اینجا بصورت اشتباه به جای اینکه کد خود را قبل از تگ شروع و یا بعد از تگ پایان قرار دهید؛ مابین این دو تگ بگذارید .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
function uyrh0te_get_attachment( $attachment_id ) { $attachment = get_post( $attachment_id ); return array( 'alt' => get_post_meta( $attachment->ID, '_uyrh0te_attachment_image_alt', true ), 'caption' => $attachment->post_excerpt, 'description' => $attachment->post_content, 'href' => get_permalink( $attachment->ID ), 'src' => $attachment->guid, 'title' => $attachment->post_title ); // کد دلخواه ما که میخواهیم به قالب اضافی کنیم. function doko_my_header_add_to_cart_fragment( $fragments ) { //تگ شروع فانکشن دلخواه ما از اینجا شروع میشود. ob_start(); $count = WC()->cart->cart_contents_count; ?><span class="cart-count" href="<?php echo WC()->cart->get_cart_url(); ?>" title="<?php echo esc_html__( 'View your shopping cart','doko' ); ?>"><?php if ( $count > 0 ) { ?> <span class="cart-contents-count"><?php echo esc_html( $count ); ?></span> <?php } ?></span><?php $fragments['span.cart-count'] = ob_get_clean(); return $fragments; } // تگ پایان فانکشن کد دلخواه ماست. //تگ پایان فانکشن اول در اینجا قرار دارد. } |
در این زمان است که خطای مورد نظر به نمایش در خواهد آمد.
حالت احتمالی دوم:
در این حالت ممکن است باز هم به دلیل بی دقتی و سهوی میتواند به وجود بیاید این است که ما در زمان درج کد دلخواه PHP خود ؛ آنرا بعد تگ باز و قبل از تگ بسته php یک کد دیگر در قالب یا افزونه وردپرس وارد کنیم. مثال عملی به صورت زیر خواهد بود:
1 2 3 4 5 6 |
// این یک تگ باز php است. و کد ما از اینجا شروع می شود <?php if ( $args['avatar_size'] != 0 ) echo get_avatar( $comment, 124 ); // این یک تگ بسته php است. و کد ما اینجا تمام می شود. ?> |
حالا اگر کد دلخواه خود را مابین این دو تگ قرار دهیم. با مشکل مواجه می شویم.
1 2 3 4 5 6 7 8 |
// این یک تگ باز php است. و کد ما از اینجا شروع می شود <?php if ( $args['avatar_size'] != 0 ) echo get_avatar( $comment, 124 ); //شروع کد دلخواه و سفارشی ما <?php comment_class( empty( $args['has_children'] ) ? '' : 'parent' ) ?> // پایان کد دلخواه و سفارشی ما // این یک تگ بسته php است. و کد ما اینجا تمام می شود. ?> |
پس میبایست بعد از تگ پایان , کد دلخواه را درج کنیم.
1 2 3 4 5 6 7 8 9 |
//تگ شروع کد موجود در قالب <?php if ( $args['avatar_size'] != 0 ) echo get_avatar( $comment, 124 ); // تگ پایان ?> //شروع کد دلخواه و سفارشی <?php comment_class( empty( $args['has_children'] ) ? '' : 'parent' ) ?> // پایان کد دلخواه و سفارشی |
همچنین میتوانید ویدئوی مرتبط با این آموزش را در زیر مشاهده نمایید.
امیدواریم که این آموزش برای شما مفید بوده باشد. سوالات خود را بعنوان کامنت در همین پست ارسال نمایید.