در بسیاری از مواقع، نیاز میشود که کدهایی (Code Snippets)  رو در فایل Functions.php فالب خودمون قرار بدیم. اگرچه این کار برای افرادی که PHPکار هستند کار ساده‌ایست، برای تازه‌کارها خسته کننده است. افراد تازه‌کار اغلب منتظر نتیجه نهایی آموزشهای موجود هستند و دانش اینکه کد PHP ارائه شده را دقیقا کجا و به چه طریقی در کدهای خودشون قرار دهند تا مشکلی برای سایت پیش نیاد رو ندارند. هیچ مشکلی نیست ، اگر این مقاله رو برای این میخونید که مشکلی برای سایتتون پیش اومده و به دنبال رفع این مشکل هستید ، باید بهتون بگم شما تنها کسی نیستید که این مشکل براش پیش اومده. همه‌ی ما از یک نقطه‌ای شروع کردیم، و همه‌ی ما مرتکب این اشتباهات شدیم. در این مقاله نشون میدم که چطور میشه از رایجترین اشتباهات در کپی کردن کدهای PHP فایلهای آموزشی در فایل Functions.php جلوگیری کرد. به این ترتیب افزودن اسنیپت کد در وردپرس براتون راحتتر میشه.

کپی کردن کد php در functions.php

نکته : فایل Functions.php قالب شما در مسیر /wp-content/themes/yourthemename/ قرار دارد که yourthemename نام قالب مورد استفاده شماست. توجه داشته باشید که این فایل با Functions.php موجود در پوشه /wp-includes/ متفاوت است.
برای اینکه بدونید چطور کد رو به درستی کپی کنید ، باید کدهای PHP ابتدایی زیر رو یاد بگیرید.

[php]
//تگ باز کد پی اچ پی
<?php
//تگ بستن کد پی اچ پی
?>
[/php]

خب ، خط اول و سوم که کامنت هستند ، و اجرا نمیشن ، یعنی صرفا توضیحاتی رو در مورد کد نوشته شده میده ، مثلا در خط اول توضیح داده شده که تگ php?> مربوط به شروع کد php هست و خط چهارم توضیح میده که تگ <? مربوط به بسته شدن یا انتهای کد هست. برای گذاشتن توضیحات هم که از // میشه.
علت اینکه باید با این کدها آشنا بشید اینه که بیش از 95% مواردی که برای سایت کاربرانمون پیش اومده بود و اونهارو برطرف کردیم، مربوط به اشتباه کپی کردن کدها بود. در ادامه معمولترین اشتباهات کاربران رو توضیح میدم:
1.    فرض کنید که شما کد زیر رو در یک وبسایت آموزشی پیدا کردین و حالا میخواهید از اون استفاده کنید.

[php]
<?php
add_filter( ‘login_headerurl’, ‘custom_loginlogo_url’ );
function custom_loginlogo_url($url) {
return ‘http://www.wpbeginner.com’;
}
?>
[/php]

فرض کنیم فایل Functions.php شما به شکل زیر هست و شما این کد رو کپی کردید (البته معمولا این فایل کدهای خیلی بیشتری داره):

[php]
<?php
//کدهای پی‌اچ‌پی بسیار زیادی در این قسمت از فایل شما وجود دارد

//کاربر کدهایی که در وب پیدا کرده را به صورت زیر کپی میکند

<?php
add_filter( ‘login_headerurl’, ‘custom_loginlogo_url’ );
function custom_loginlogo_url($url) {
return ‘https://www.bestit.co’;
}
?>
?>
[/php]

حالا ، کاملا مشخصه که این کد باعث داون (down) شدن سایت شما میشه ، چون شما تگ PHP رو باز کردین بدون اینکه اون رو ببندید. برای حل این مشکل دو تا راه دارید. اولین روش اینه که کد رو در جای مناسب کپی کنید، مثل کد زیر:

[php]

<?php
//کدهای پی اچ پی زیادی در این قسمت از فایل شما وجود دارد

//طریقه‌ی صحیح بستن تگ رو ببینید
?>
//حالا میتونید تگ پی‌اچ‌پی رو باز کنید
<?php
add_filter( ‘login_headerurl’, ‘custom_loginlogo_url’ );
function custom_loginlogo_url($url) {
return ‘https://www.bestit.co’;
}
?>
[/php]

توجه کنید که کد PHP مورد نظر ما بعد از بسته شدن تگ قبلی کپی شده.
روش دیگه هم اینه که تگ شروع و پایان کد PHP رو از تابع جدیدتون پاک کنید، پس کد به شکل زیر در میاد:

[php]
<?php
//کدهای پی اچ پی زیادی در این قسمت از فایل شما وجود دارد

// کدهای جدید ، اینجا کپی میشوند ، دقت کنید که تگ های باز و بسته چطور از کد حذف شده اند

add_filter( ‘login_headerurl’, ‘custom_loginlogo_url’ );
function custom_loginlogo_url($url) {
return ‘https://www.bestit.co’;
}
?>
[/php]

2.    در مقالات آموزشی هر کدنویسی استایل خاصی برای نوشتن داره ، بعضیها کد آموزشی خودشون رو با تگ PHP میگذارند، مانند مثال بالا ، بعضیها هم از نوشتن تگهای PHP صرف نظر میکنند، و این باعث به وجود آمدن دومین مشکل میشه. کد زیر رو در نظر بگیرید:

[php]
function custom_loginlogo() {
echo ‘<style type=”text/css”>
h1 a {background-image: url(‘.get_bloginfo(‘template_directory’).’/images/login_logo.png) !important; }
</style>’;
}
add_action(‘login_head’, ‘custom_loginlogo’);
[/php]

در اینجا نویسنده فرض کرده که شما میدونید که این کدها باید در تگهای PHP قرار بگیرند. حتی در برعضی از آموزشها گفته میشه که کدشون رو در انتهای فایل Functions.php قرار بدید. یک اشتباه دیگر افراد تازه کار به شکل زیر هست:

[php]
<?php
//کدهای پی اچ پی زیادی در این قسمت از فایل شما وجود دارد
?>

// کاربر کدها را اینجا کپی میکند (توجه کنید که تگ پی‌اچ‌پی در خط قبل بسته شده است)

function custom_loginlogo() {
echo ‘<style type=”text/css”>
h1 a {background-image: url(‘.get_bloginfo(‘template_directory’).’/images/login_logo.png) !important; }
</style>’;
}
add_action(‘login_head’, ‘custom_loginlogo’);
[/php]

اگر دقت کنید میبینید که کاربر ، کدها رو در خارج از تگ PHP کپی کرده و وردپرس نمیفهمه که این کدها چی هستن و به همین خاطر سایت داون میشه. کدنویسی درست به شکل زیر هست:

[php]
<?php
//کدهای پی اچ پی زیادی در این قسمت از فایل شما وجود دارد

//کدهای جدید
function custom_loginlogo() {
echo ‘<style type=”text/css”>
h1 a {background-image: url(‘.get_bloginfo(‘template_directory’).’/images/login_logo.png) !important; }
</style>’;
}
add_action(‘login_head’, ‘custom_loginlogo’);

//انتهای تگ پی‌اچ‌پی
?>
[/php]

3.    خب حالا که مسئله تگهای باز و بسته در PHP براتون روشن شد ، سومین اشتباه رایج در کپی کردن کدهای جدید در یک تابع موجود رو توضیح میدم.

شکل کلی یک تابع به شکل زیر هست:

[php]
function custom_function_name() { // This is the opening tag of a function

// کد مربوط به تابع اینجا می‌آید

} // بستن تابع
[/php]

اگر شما تابعی رو درون یکتابع دیگه کپی کنید، باعث داون شدن سایتتون میشید. مثال زیررو ببینید:

[php]
function custom_function_name() { // تگ باز کردن تابع

// کدهای مربوط به تابع

function custom_loginlogo() {
echo ‘<style type=”text/css”>
h1 a {background-image: url(‘.get_bloginfo(‘template_directory’).’/images/login_logo.png) !important; }
</style>’;
}
add_action(‘login_head’, ‘custom_loginlogo’);

} // تگ بستن تابع
[/php]

شما نمیتونید اینکار رو انجام بدید ، هر تابعی مستقل هست ، پس نمیتونید هر دو تابع رو با هم به کار ببرید. طریقه صحیح نوشتن این کد به شکل زیر هست:

[php]
function custom_function_name() { // This is the opening tag of a function

// code specific to the function goes here

} // کدهای مربوط به تابع

function custom_loginlogo() {
echo ‘<style type=”text/css”>
h1 a {background-image: url(‘.get_bloginfo(‘template_directory’).’/images/login_logo.png) !important; }
</style>’;
}
add_action(‘login_head’, ‘custom_loginlogo’);
[/php]

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

لیلا زاهدیAuthor posts

Avatar for لیلا زاهدی

فارغ التحصیل رشته مهندسی کامپیوتر، دانشجوی کارشناسی ارشد فناوری اطلاعات. علاقه مند به مباحث طراحی و بهینه سازی سایت برای موتورهای جستجو

2 دیدگاه ها

  • سلام! ممنون از توضیحاتتون خانم مهندس زاهدی عزیز، من یه مشکلی با قالب وب سایتم دارم، من یه قالب روی ورد پرسم نصب کردم حالا فکر میکنم تگ title سایت ایراد داره، چون اصلا description رو نداره و نشون نمیده، توی تایتل ورد پرس مثلا باید بنویسه، رادیو معدن – صدای مهندسی معدن کشور، برای من قسمت دوم رو با اینکه توی تنظیمات انجام دادن ولی نشون نمیده، یه نمونه هم از قالب اورجینال برداشتم جایگزین کردم بازم درست نشد، شما میدونید دقیقا ایراد از کجاست، راهنمایی کنید ممنون میشم. با تشکر، علی دوستی

    • خواهش میکنم.
      فکر نمیکنم مشکل از تگ تایتل باشه.
      من سورس پیج شما رو دیدم ، تگ توضیحات رو داره. و نشون هم میده. اما در مورد تایتل:
      دو تا سوال! اول اینکه قالبی که راه اندازی کردید رو خریداری کردید یا رایگان بود؟
      دوم اینکه اون تایتل و توضیحاتی که میفرمایید رو از چه مسیری عوض میکنید که اعمال نمیشه؟

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *