یاروم
1 سال پیش توسط یاروم مطرح شد
12 پاسخ

جمع کردن مقدار دو فیلد عددی در وردپرس

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

کدی میخوام ک مقدار فیلد موجود در پست تایپ x با مقدار فیلد موجود در آپشن پیج y جمع بشه. هر دو فیلد از نوع number هستند. مجموع بدست اومده در همون فیلد مربوط به پست تایپ x قرار بگیره ک بتونم تو لیستینگ جت انجین ازش استفاده کنم.
لطفا هر روشی که به ذهنتون میرسه رو ارسال کنید. پیشاپیش ممنون.

دوستی در یکی از گروه های تلگرامی گفتن با جاوا اسکریپت میشه ولی از عهده خودم خارجه.


ثبت پرسش جدید
یاروم
تخصص : طراح و اجرای تورهای مسافرتی
@yaroom 1 سال پیش مطرح شد
0

سلام. یعنی کسی نیست یه راهنمایی بکنه برای رفع این مشکل...
هر چی تو اینترنت سرچ کردم به جوابی نرسیدم. از تمام دوستان کدنویس و باتجربه خواهشمندم برای رفع این مشکل دست یاری برسونن. ممنون


مهدی نظری
تخصص : توسعه دهنده Front End
@mahdi.nazari 1 سال پیش مطرح شد
0

سلام یاروم جان 🖐 امیدوارم حالت خوب و عالی باشی✨

هرجا مشکلی داشته بچه ها و از جمله خودم رو منشن کن کاری نداره که قطعا به نتیجه میرسی ❤️

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

  1. ابتدا یک فیلد مخصوص برای آپشن پیج ایجاد کن. این فیلد باید نوع "Number" داشته باشه و مقداری که می‌خواهی رو به آن اضافه کنی رو در اون وارد کن

  2. در المنتور، به تنظیمات لیستینگ جت انجین برو و قسمت "پیش‌فیلترها" را باز کن.

  3. در این قسمت، یک اسکریپت جاوا اسکریپت بنویس تا مقدار فیلد پست تایپ و مقدار فیلد آپشن پیج را جمع کنه و در فیلد مورد نظر شما در پست تایپ قرار بده . به عنوان مثال:

// گرفتن مقدار فیلد پست تایپ
var postFieldValue = Number(document.querySelector('.post-field-class').value);

// گرفتن مقدار فیلد آپشن پیج
var optionPageValue = Number(document.querySelector('.option-page-field-class').value);

// محاسبه مجموع
var totalValue = postFieldValue + optionPageValue;

// قرار دادن مقدار محاسبه شده در فیلد پست تایپ
document.querySelector('.post-field-class').value = totalValue;

در کد بالا، '.post-field-class' به کلاس فیلد مربوط به پست تایپ اشاره داره و '.option-page-field-class' به کلاس فیلد مربوط به آپشن پیج. این اسکریپت مقدار دو فیلد را جمع میکنه و نتیجه را در فیلد پست تایپ قرار می‌ده

  1. بعد این کد جاوا اسکریپت را در المنتور به عنوان یک اسکریپت سفارشی اضافه کن و در تنظیمات لیستینگ جت انجین از آن میتونی استفاده کنی .

این روش بهت اجازه می‌ده تا مجموع دو فیلد را در لیستینگ جت انجین نمایش بدی و اون رو بر اساس آپشن پیج به‌روز کنی. اگر سوال دیگری دارید یا نیاز به راهنمایی بیشتری دارید، خوشحال می‌شم کمکت کنم.

امیدوارم پاسخم بهت کمک کرده باشه ❤️
موفق و پیروز باشی 🤘🌹


یاروم
تخصص : طراح و اجرای تورهای مسافرتی
@yaroom 1 سال پیش مطرح شد
0

@mahdi.nazari
سلام. ممنون بابت پاسخگویی

یه توضیح در مورد کاری که میخام انجام بدم دوباره میدم:
ابتدا با جت انجین اومدم یک پست تایپ به نام listp به همراه چند فیلد ایجاد کردم که یکی از این فیلدها ( Price_item ) از نوع number هست . (این همون فیلدی هست که باید به صورت اتومات به مقدار این فیلد از طریق فیلد اپشن پیج اضافه بشه)

بعدش رفتم یک آپشن پیج به نام set-listp با یک فیلد به نام price_item_inc ایجاد کردم.
در نهایت از طریق جت انجین یک لیستینگ ایجاد کردم تا تمام مطالب پست تایپ listp را به نمایش بزارم. (تمام فیلدهای لازم رو هم از طریق داینامیک فیلد تنظیم کردم)

حالا میخام هر زمان خواستم به فیلد price_item مبلغی اضافه کنم، بتونم با وارد کردن مبلغ مورد نظر در فیلد اپشن پیج به تمام قیمت های مطالبی که در پست تایپم ایجاد کردم افزوده بشه.


سوالاتی که با خوندن راهنمایی شما برام ایجاد شده:

  • بخش "پیش فیلترها"ی لیستینگ جت انجین کجاست؟ معادل انگلیسیش چیه؟ (جت انجین و المنتور من انگلیسیه)
  • به فیلدهای پست تایپ و آپشن پیج چجوری کلاس تعریف کنم؟
  • این کد جاوا رو میشه تو پلاگین code snippets اضافه کرد؟
  • اون جاهایی که باید توی المنتور تنظیم کنم اگر عکس بفرسیتن ممنون میشم.

آیا امکانش هست خودتون با توجه به توضیحات بالا، کدنویسی جاوا رو انجام بدین؟


مهدی نظری
تخصص : توسعه دهنده Front End
@mahdi.nazari 1 سال پیش مطرح شد
1

قربانت ⚡❤️

بخش "پیش‌فیلترها" در جت انجین معادل انگلیسی اون "Pre-Filters" هست . این بخش در المنتور میتونه به عنوان "Pre-Filters" یا "Pre-Filter Hooks" باشه .

برای تعریف کلاس‌ها برای فیلدهای پست تایپ و آپشن پیج در المنتور، می‌تونی به صفحه ویرایش مربوط به هر فیلد بری و در بخش "Advanced" یک کلاس CSS به آن فیلد اختصاص بدی . برای مثال، در بخش "Advanced" فیلد پست تایپ، شما میتونه کلاس "post-field-class" را تعریف کنیی و همین کار رو برای فیلد آپشن پیج انجام بدی .

بله، می‌تونی جاوا اسکریپت را در پلاگین Code Snippets اضافه کنی . این افزونه بهت امکان میده کد جاوا اسکریپت را به وب‌سایت خود اضافه کنی.

برای تنظیم کدهای جاوا اسکریپت در المنتور، به صفحه ویرایش مربوط به لیستینگ جت انجین برو و در بخش "Custom JavaScript" کد جاوا اسکریپت روقرار بده .

در ادامه بنظرم دوستانم میتوننن بهت کمک بیشتری برای درک منطق ماجرا بهت بکنن سپاس

@Raymond
@fullstack


یاروم
تخصص : طراح و اجرای تورهای مسافرتی
@yaroom 1 سال پیش مطرح شد
0

@mahdi.nazari
ممنون. ولی من این بخش های pre-filters و تعریف کلاس برای فیلدها رو تو المنتور و جت انجین پیدا نکردم. جایی رو ندیدم که چنین گزینه هایی داشته باشه.

از اینکه وقت گذاشتن برای پاسخگویی و حل مشکل بنده سپاسگزارم.
دوستان عزیز دیگه که آقای مهدی هم منشن کردن اگر نظر و ایده ای برای این مساله دارند، ممنون میشم پاسخ خودشون رو ارسال کنند
@Raymond
@FullStack


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 1 سال پیش مطرح شد
یاروم
تخصص : طراح و اجرای تورهای مسافرتی
@yaroom 1 سال پیش آپدیت شد
0

@Raymond
@mahdi.nazari
ممنون. این پلاگین calculated-callback تقریبا کارمو راه انداخت. تو این فاصله هم خودم یک تابع نوشتم که هنوز کامل نشده. فقط هنوز نتونستم مقدار فیلدی ک از آپشن پیج میگیرم رو با فیلد پست تایپم جمع بزنم!! علتش چیه؟

function update_my_metadata(){
    $args = array(
        'post_type' => 'listp', 
        'post_status' => 'publish', 
        'posts_per_page'   => -1 
    );
    $posts = get_posts($args);
    foreach ( $posts as $post ) {
            $price1 = get_post_meta( $post->ID, 'price_item', true );
            $price2 = jet_engine()->listings->data->get_option( 'set_listp::price_item_inc' );
            $total_price = intval($price1) + intval($price2) ;
            update_post_meta( $post->ID, 'price_item', $total_price );
    }
}

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

$total_price2=0;
$price2 = get_post_meta( $post->ID, 'change_price1', true );
update_post_meta( $post->ID, 'change_price1', $total_price2 );

برای آپدیت مقدار فیلد آپشن پیج باید چه کدی بزنم؟ اینو تو سرچ پیدا کردم ولی کار نمیکنه.

// option page with name slug = "dining-certificate-options_copy"
//  field slug  =  "certificate-number"
// getting the whole option array from wp_option
$dinning_cert_option = get_option('dining-certificate-options_copy');
//Only change the value of a item in the array
$dinning_cert_option['certificate-number'] = ' anything';
// simply update the option 
update_option('dining-certificate-options_copy', $dinning_cert_option); 


مهدی نظری
تخصص : توسعه دهنده Front End
@mahdi.nazari 1 سال پیش مطرح شد
0

به نظر میاد که مشکلت در آپدیت مقدار فیلد آپشن پیج با استفاده از کدی که ارائه دادیه ، به وجود اومده . برای آپدیت مقدار فیلد آپشن پیج در وردپرس، باید از توابع مربوط به ذخیره و بازیابی آپشن‌ها استفاده کنی. این توابع بهت اجازه میده مقدار یک فیلد خاص در آپشن پیج را به‌روز کنی. در مثال تو ، فیلد مورد نظر "certificate-number" است.

لطفاً کدی مشابه زیر را در نظر بگیر تا مقدار فیلد "certificate-number" در آپشن‌های شما به‌روز بشه :

// Getting the current option
$dining_cert_option = get_option('dining-certificate-options_copy');

// Update the specific field value
$dining_cert_option['certificate-number'] = 'new_value_here'; // جای new_value_here را با مقدار جدید خودتان جایگزین کنید

// Save the updated option
update_option('dining-certificate-options_copy', $dining_cert_option);

لطفاً به این نکته توجه داشته باش که مقدار "new_value_here" را با مقداری که می‌خای در فیلد "certificate-number" آپشن پیج قرار بدی، جایگزین کنی

اگر همچنان مشکلی با آپدیت فیلد آپشن پیج داری، لطفاً اطمینان حاصل کنی که نام آپشن و نام فیلد درست باشع و اطمینان حاصل کن که هیچ اشکالی در نحوه دسترسی به آپشن‌ها نداری . در صورت لزوم، از توابعی مانند var_dump یا error_log برای چک کردن مقادیر استفاده کن و مطمئن شو که داده‌ها به درستی دریافت می‌شن.


یاروم
تخصص : طراح و اجرای تورهای مسافرتی
@yaroom 1 سال پیش آپدیت شد
0

@mahdi.nazari
سلام. مشکل آپدیت فیلد آپشن پیج حل شد. ولی هنوز تو کد اصلی تابع یه مشکلی هست. خط 11 به درستی عمل نمیکنه و چیزی برنمیگردونه. مشکلش چیه؟؟

function update_my_metadata(){
    $args = array(
        'post_type' => 'listp', 
        'post_status' => 'publish', 
        'posts_per_page'   => -1 
    );
    $posts = get_posts($args);
    foreach ( $posts as $post ) {
            $price1 = get_post_meta( $post->ID, 'price_item', true );
            $price2 = jet_engine()->listings->data->get_option( 'set_listp::price_item_inc' );
            $total_price = intval($price1) + intval($price2) ;
            update_post_meta( $post->ID, 'price_item', $total_price );
    }
}

مهدی نظری
تخصص : توسعه دهنده Front End
@mahdi.nazari 1 سال پیش مطرح شد
0

مطمئن شین که "set_listp" نام آپشن پیج درستی باشه . از نظر شما مطمئن شین که نام آپشن پیج و فیلد "price_item_inc" درست تعریف شدن.

بررسی کنید که JetEngine به درستی فعال باشه و توابع آن در دسترس باشن.

برای اطمینان از مقداری که از آپشن پیج بازیابی می‌شود، از توابعی مانند var_dump یا error_log استفاده کنید تا مقدار مورد نظر را نمایش بدین و بررسی کنید که آیا مقدار درستی است یا خیر. به عنوان مثال

$price2 = jet_engine()->listings->data->get_option( 'set_listp::price_item_inc' );
var_dump($price2); // یا error_log($price2); برای نمایش در فایل error_log

یاروم
تخصص : طراح و اجرای تورهای مسافرتی
@yaroom 1 سال پیش مطرح شد
0

@mahdi.nazari
مقدار فیلد آپش پیج رو وقتی با تابع زیر اجرا میکنم مشکلی نداره و نشون میده.

function option_page()
{
$price2 = jet_engine()->listings->data->get_option( 'change-pt::change-pts' );
    return $price2;
}
add_shortcode('op_change', 'option_page');

ولی اگر تو کد اصلی بزارم null برمیگردونه با تابع var_dump چک کردم. علتش چیه؟ تو تابع بالا مقدار درست رو نشون میده ولی تو کد اصلی null نشون میده؟!؟!


مهدی نظری
تخصص : توسعه دهنده Front End
@mahdi.nazari 1 سال پیش مطرح شد
0

اگع تابع option_page به درستی مقدار فیلد آپشن پیج را برمیگردونه و نمایش می‌ده، اما در کد اصلی که مقدار را به عنوان null نشان می‌ده، احتمالاً دلیل مشکل نه در تابع option_page است بلکه در نحوه استفاده از تابع update_my_metadata یا ترتیب اجرای کدها ممکن است مشکل باشع


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام