maraljoon

چک کردن دیتابیس و اضافه کردن یک مقدار غیر تکراری در متافیلد پست

16 پست در این موضوع قرار دارد

درود دوستان محترم و اساتید گرامی.

پوزش میخوام بخاطر گنگ بودن عنوان سوالم.

بخاطر عدم آشنایی کافی با هوک های وردپرس نتونستم این مورد رو حل کنم. من یک فیلد در یک پست تایپ دارم. تا اینجاشو موفق شدم که وقتی یک پست جدید ساخته میشه بصورت خودکار این فیلد یک مقدار تعیین شده مثلا یک عد "1000" رو بگیره. ولی خب اینطوری این مقدار برای همه پست ها تکراری میشه. چطور میشه در این کد بزرگترین مقدار رو در دیتابیس چک کرد و بهش یک عدد اضافه کرد؟

مثلا در حال حاضر مقداری که در دیتابیس برای این متا فیلد ذخیره شده 1005  هست. کد بیاد تو دیتابیس چک کنه و بزرگترین عدد رو پیدا کنه و یک عدد بهش اضافه کنه که بشه 1006

امیدوارم بتونم از شما کمک بگیرم و یک چیز جدید یاد بگیرم.

کد:


add_action( 'save_post', 'myplugin_save_postdata' );

function myplugin_save_postdata( $post_id ) {

 
  if ( 'post' == $_POST['post_type'] ) {
    if ( ! current_user_can( 'edit_page', $post_id ) )
        return;
  } else {
    if ( ! current_user_can( 'edit_post', $post_id ) )
        return;
  }

  $mydata = '1000'; 

  update_post_meta( $post_id, 'id_number', $mydata );
}

 

0

به اشتراک گذاری این پست


لینک به پست

توضیح شما خیلی مشخص نیست که این id_number چی هست و چه کاری باید انجام بده و منظورتون از بزرگترین عدد تو دیتابیس چی هست؟ایا منظورتون اخرین id ثبت شده مثلا تو جدول postmeta هست؟

1

به اشتراک گذاری این پست


لینک به پست
در در 7/23/2019 at 10:01، Mobin گفته است :

توضیح شما خیلی مشخص نیست که این id_number چی هست و چه کاری باید انجام بده و منظورتون از بزرگترین عدد تو دیتابیس چی هست؟ایا منظورتون اخرین id ثبت شده مثلا تو جدول postmeta هست؟

سلام. وقتتون بخیر

بله منظورم آخرین مقدار ثبت شده در جدول postmeta هست. میخوام بصورت اتوماتیک اعدادی رو که از 1000 شروع میشه به هر پستی که منتشر میشه بدم. از قبل یک کاستوم فیلد برای اینکار گرفتم.به همون اسم id number

حالا میخوام سیستم خودش اینارو بسازه. کدی که بالاگذاشتم اینطوری عمل میکنه که وقتی مثلا افزودن نوشته رو میزنید میاد یک عدد مثلا 1000 وارد اون کاستوم فیلد میکنه و خب بعد انتشار این مقدار هم در دیتابیس ذخیره میشه.

حالا من میخوام این اعداد تکراری نباشه. یعنی وقتی اولین پست رو منتشر کردم که مقدار id_number شده 1000 پست بعدی خودش تشخیص بده که قبلا عدد 1000 ذخیره شده و بیاد بهش یک عدد اضافه کنه و بشه 1001

به همین منوال برای پست های بعدی.

0

به اشتراک گذاری این پست


لینک به پست

شما میتونین از تابع time استفاده کنید یک مقدار عددی به شما میده که غیر تکراری هست

یا از تابع mt_rand استفاده کنید به صورت زیر

و برای پیدا کردن اخرین مقدار اضافه شده به دیتابیس میشه از دستور max تو mysql استفاده کرد

$id_number = time();
$id_number = mt_rand(100,999).mt_rand(10,99).mt_rand(100,999);
$id_number = $wpdb->get_var("select max(meta_id) from $wpdb->postmeta");

 

1

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

در 3 ساعت قبل، Mobin گفته است :

 

ممنونم از شما.

نتونستم این کد رو استفاده کنم. چطور باید در کد بالا که گذاشتم جایگزاریش کنم؟

این بخش از کد

$id_number = $wpdb->get_var("select max(meta_id) from $wpdb->postmeta");

خطا میده و وقتی میذارمش سایت بالا نمیاد.

یک سوال دیگه اینکه این کد بصورت رندوم عدد تولید میکنه؟

میشه کاریش کرد از 1000 شروع بشه؟ و پشت سرهم باشه؟

ویرایش شده در توسط maraljoon
0

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

در 6 دقیقه قبل، maraljoon گفته است :

ممنونم از شما.

نتونستم این کد رو استفاده کنم. چطور باید در کد بالا که گذاشتم جایگزاریش کنم؟

این بخش از کد


$id_number = $wpdb->get_var("select max(meta_id) from $wpdb->postmeta");

خطا میده و وقتی میذارمش سایت بالا نمیاد.

یک سوال دیگه اینکه این کد بصورت رندوم عدد تولید میکنه؟

میشه کاریش کرد از 1000 شروع بشه؟ و پشت سرهم باشه؟

فکر میکنم رندومه. برام چنین عددی تولید کرد:46681909

میشه ثابتش کرد؟

ویرایش شده در توسط maraljoon
0

به اشتراک گذاری این پست


لینک به پست

باید قبلش $wpdb رو global  کنین

global $wpdb;
$id_number = $wpdb->get_var("select max(meta_id) from $wpdb->postmeta");

این کد تا وقتی ردیفی به جدول پست متا اضافه نشده مقدار ثابتی داره

این کد به صورت رندوم عدد تولید نمیکنه فقط مقدار اخرین id درون جدول postmeta وردپرس رو برمیگردونه

اون 2 کد دیگه که قرار داده بودم مقدار رندوم تولید میکنن

1

به اشتراک گذاری این پست


لینک به پست
در 8 دقیقه قبل، Mobin گفته است :

باید قبلش $wpdb رو global  کنین


global $wpdb;
$id_number = $wpdb->get_var("select max(meta_id) from $wpdb->postmeta");

این کد تا وقتی ردیفی به جدول پست متا اضافه نشده مقدار ثابتی داره

این کد به صورت رندوم عدد تولید نمیکنه فقط مقدار اخرین id درون جدول postmeta وردپرس رو برمیگردونه

اون 2 کد دیگه که قرار داده بودم مقدار رندوم تولید میکنن

ممنونم.

ببخشید یخورده گیج شدم. این بخش از کد چطور عدد رو تشخیص میده که بزگتره یا نه؟ خودش که عدد تولید نمیکنه؟

باید حتما  کد زیر رو استفاده کنم در کنارش؟

$id_number = mt_rand(100,999).mt_rand(10,99).mt_rand(100,999);

ممنون میشم واضحتر راهنماییم کنید. تو توابع وردپرس خیلی ضعیفم هنوز :D

 

 

0

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

در ۱ ساعت قبل، Mobin گفته است :

باید قبلش $wpdb رو global  کنین


global $wpdb;
$id_number = $wpdb->get_var("select max(meta_id) from $wpdb->postmeta");

 

این کد به صورت رندوم عدد تولید نمیکنه فقط مقدار اخرین id درون جدول postmeta وردپرس رو برمیگردونه

منظورتون اینه که آیدی آخرین مقدار تو جدول رو بر میگردونه؟  خود مقدار رو چطور میشه برگردوند؟

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

چطور میتونم بهش بگم از اون متاکی خاص که مدنظرمه آخرین مقدار رو برگردونه؟

ویرایش شده در توسط maraljoon
0

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

تونستم به این شکل انجامش بدم و جواب داد.

$mydata = $wpdb->get_var("select max( cast( meta_value as UNSIGNED ) ) FROM $wpdb->postmeta WHERE meta_key='id_number'") + 1 ;

ممنونم از راهنمایی شما. خیلی بهم کمک کرد

فقط الان یک مشکل دیگه وجود داره. وقتی افزودن پست رو بزنم و حتی اگه اون پست ذخیره نشه این مقدار  Id_number تو جدول ذخیره میشه.

یعنی مثلا پست قبلی که منشتر شده مقدار id_number بودخ 1000

افزودن نوشته رو بزنم بدون اینکه پست حتی ذخیره بشه مقدار 1001 در جدول ذخیره میشه.

مشکل از این بخش از کدمه؟

  update_post_meta( $post_id, 'id_number', $mydata );

چطور تغییرش بدم که فقط پستی که ذخیره میشه این مقدار براش ذخیره بشه؟

ویرایش شده در توسط maraljoon
0

به اشتراک گذاری این پست


لینک به پست

بخاطر این هست که وردپرس در صفحه پست همیشه یک پست به صورت پیش نویس ذخیره میکنه تا اطلاعات پست شما رو ذخیره کنه اگه به هر دلیلی مرورگرتون بسته شد تا اونجایی که نوشتین نپره و براتون میاره

این کد چی هست؟ به چه منظوری استفاده میشه؟ شما چه کاری باهاش انجام میدین؟ انها رو توضیح بدین بهتر میشه به جواب درست رسید

0

به اشتراک گذاری این پست


لینک به پست
در 1 ساعت قبل، Mobin گفته است :

 

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

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

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

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

الان مثلا یه پست منتشر میشه که کدش 1000 هست. یه افزودن نوشته باز بشه ولی منتشر نشه اونم کد بعدی یعنی 1001 رو میگیره. ولی پست دومی که منشتر بشه بجای اینکه بشه 1001 میشه 1002. که منطقیه.

چطور میتونم بهش بگم این اعداد رو به پست هایی بده که منتشر شدن؟ حالا چه منتشر شده باشه چه پیش نویس و یا بازبینی
 

0

به اشتراک گذاری این پست


لینک به پست
در در 7/30/2019 at 10:00، Mobin گفته است :

 

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

0

به اشتراک گذاری این پست


لینک به پست
در در 7/30/2019 at 12:39، maraljoon گفته است :

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

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

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

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

الان مثلا یه پست منتشر میشه که کدش 1000 هست. یه افزودن نوشته باز بشه ولی منتشر نشه اونم کد بعدی یعنی 1001 رو میگیره. ولی پست دومی که منشتر بشه بجای اینکه بشه 1001 میشه 1002. که منطقیه.

چطور میتونم بهش بگم این اعداد رو به پست هایی بده که منتشر شدن؟ حالا چه منتشر شده باشه چه پیش نویس و یا بازبینی
 

شما میتونین به پستهای مورد نظرتون یک متا بدین مثلا اسمش باشه filter_search مقدارشم مثلا 1000 باشه خب برای پست بعدی شما کافیه مقدار اخرین filter_search که وارد کردین رو بگیرین 1 بهش اضافه کنین حالا میتونین موقع جستجو بر همین اساس عمل کنین
مثلا پستهایی که متا فیلد filter_search دارن و مقدارش مثلا بین 1000 تا 1100 هست و بر همین اساس هم میتونین مرتبشون کنین

البته باز هم من متوجه نشدم چه لزومی به چنین کدی هیت؟ mysql کوئریهای خیلی انعطاف پذیری داره

1

به اشتراک گذاری این پست


لینک به پست

عالی بود ممنون

0

به اشتراک گذاری این پست


لینک به پست
در در 8/3/2019 at 09:43، Mobin گفته است :

 

ممنونم از شما. همون موارد قبلی که گفتید راهگشا بود و کارم رو راه انداخت ,  همچنین از این موارد یک چیز جدید آموختم. ممنونم

0

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری