PDA

View Full Version : سوال: ارسال یک متغییر مقدار دهی شده(ساده اما حیاتی)



imahdio
یک شنبه 29 دی 1392, 11:46 صبح
باسلام
یک پلاگین 300 خطی وردپرسی دانلود کردم و می خوام شخصی سازیش کنم.
در اوایل این پلاگین درون یک تابع شرطی، به متغییرم چنین مقدار داده ام(این مقدار دهی در اوایل پلاگین انجام می شود.)

$a=2;
می خواهم متغییر مقدار دهی شده ی $a رو درون تابع زیر استفاده نمایم(این تابع در آخر پلاگین قرار دارد.)


function wholesale_get_price( $price, $product )
{

if( $a==2 && ( !is_admin() || is_ajax() ) )
{
if( $product->is_type('simple') && get_post_meta( $product->id, '_wholesale_price', true ) > 0 )
{
$price = get_post_meta( $product->id, '_wholesale_price', true );
}
}

return $price;
}


متاسفانه بعد از کلی آزمون خطا متوجه شدم متغییر مد نظر با مقدار نال وارد تابع wholesale_get_price می شود! و بنابراین وارد if نمی شود!
بعبارت دیگر اگر بجای

if( $a==2 && ( !is_admin() || is_ajax() ) )
قرار دهم:

if( empty($a) && ( !is_admin() || is_ajax() ) )
نتیجه ی دلخواه حاصل شده!!! و وارد if می شود !!!


Global کردن هم نتیجه ای در بر نداشت. و بازهم مقدار $a خالی می باشد!!
لطفا راهنمایی ام کنید.

برای توجیه بیشتر ،فایل php مد نظر رو آپلود کردم،خطوط 150 و 375 به مشکل فوق اشاره می کند.

danial.saeedi
یک شنبه 29 دی 1392, 12:36 عصر
دوست عزیز!متغییر a$ سراسری نیست باید با استفاده از global اونو داخل تابع وارد کنی.

global $a;

imahdio
یک شنبه 29 دی 1392, 14:40 عصر
دوست عزیز!متغییر a$ سراسری نیست باید با استفاده از global اونو داخل تابع وارد کنی.

global $a;

ممنون از حسن توجه تان
اگر فایل ضمیمه را دانلود کرده باشید در خط40 متغییری رو گلوبال کرده.

global $Password_Protected;
global $a;

من بارها هم در ذیل این متغییر و هم در فایل های دیگر پلاگین هایی که احتمال می دهم با این پلاگین در ارتباط هستند ،متغییرم را گلوبال کرده ام اما هیچ تاثیری نداشته و همانطور که قبلا هم گفتم...

Global کردن هم نتیجه ای در بر نداشت. و بازهم مقدار $a خالی می باشد!!(فایل ضمیمه طبق نظر شما اصلاح _خط41_ و برای بررسی های بیشتر ،مجددا آپلود گردید)


این پلاگین قبل از به پایان رسیدنش،چندین فایل از ووکامرس رو فراخوان می کنه و من دقیقا در آخرین مرحله ی اجرایی شدن این پلاگین ، قصد بازخوانی مقدار $a رو دارم.
بنظرتون این مورد اشکالی در روند گلوبال کردن متغییر ایجاد نمی کنه؟؟؟؟؟

بنظرم کلید حل مشکلم یک تابع باید باشه که بتونه مقدار متغییرم را ارسال کنه!
یک چیزی شبیه do-action
اما نمی دونم دقیقا چی؟
کسی می تونه کمک کنه؟
مثلا در پلاگین هایی که بمنظور توسعه ی امکانات ووکامرس ضمیمه اش می شن ، استفاده از متغییر سراسری زیاد به چشمم نمی خوره!
بنظرم با توابع داده ها رو می گیرن یا انتقال می دن.
احتمال دیگه ای هم که می دم اینکه شاید باید دسترسی به دیتابیس داشته باشم تا بتونم در مکان مناسبی مقدار متغییرم رو ذخیره کنم اما فرایند اجرایی شدنش رو نمی دونم.(البته فعلا نمی دنم!!)

ممنون می شم اگه یکی یه راهنمایی بکنه من مشکلم همینجا سرپایی حل شه دیگه خوب!...

imahdio
دوشنبه 30 دی 1392, 18:53 عصر
میشه یکی فایل ضمیمه شده رو بررسی کنه
مشکلم فقط نال بودن متغییر $a خط 375 امه
چطور از طریق خط 150 ، خط 375 رو مقداردهی کنم؟

MRmoon
دوشنبه 30 دی 1392, 19:47 عصر
function wholesale_get_price( $price, $product ) use($a)
{

if( $a==2 && ( !is_admin() || is_ajax() ) )
{
if( $product->is_type('simple') && get_post_meta( $product->id, '_wholesale_price', true ) > 0 )
{
$price = get_post_meta( $product->id, '_wholesale_price', true );
}
}

return $price;
}

imahdio
سه شنبه 01 بهمن 1392, 18:09 عصر
ممنون از همکاری تون اما متاسفانه راهکار پبشنهادیتون ایراد دستوری داره
syntax error
دریم ویور چنین ایرادی رو گزارش کرد!
بازم از نظرت ممنون