انجمن


دریافت ID از نوشته آینده  (۱۲ نوشته)

  • Mostafa

    آفلاین
    ناظم
    تعداد نوشته‌ها: ۵۲۷۶
    تشکر شده: ۵۷۷۷ بار
    # نوشته شده: ۹ سال پیش
    ۲ بهمن ۱۳۸۹ - ۱۸:۵۳

    سلام,
    در تابع wp insert post و پارامتر $post اون یک آرایه‌ای هست به نام ID که شماره پست جاری رو یه جورایی ثبت می‌کنه.
    البته بدون درج این آرایه ID رو هم به ترتیب ثبت می‌کنه! این شماره ID جاری رو چطوری می‌تونم بدست بیارم؟
    the_ID و get_the_ID هم نمی‌شه! چون درون حلقه کار می‌کنه و شماره‌های قبلی رو بر می‌گردونه!

    کاربران زیر به‌خاطر این نوشته تشکر کرده‌اند:
    ~> Mr.vAhiD.DI <~
  • گناهکار

    آفلاین
    کلیددار
    تعداد نوشته‌ها: ۳۵۳۵
    تشکر شده: ۲۵۴۴ بار
    # نوشته شده: ۹ سال پیش
    ۲ بهمن ۱۳۸۹ - ۱۹:۴۱

    یعنی چی؟ دقیقاً می‌خواین چی‌کار کنین؟

    کاربران زیر به‌خاطر این نوشته تشکر کرده‌اند:
    ~> Mr.vAhiD.DI <~
  • Mostafa

    آفلاین
    ناظم
    تعداد نوشته‌ها: ۵۲۷۶
    تشکر شده: ۵۷۷۷ بار
    # نوشته شده: ۹ سال پیش
    ۲ بهمن ۱۳۸۹ - ۲۲:۴۰

    دقیقا این ID رو برای add_post_meta می‌خوام.
    یعنی هردفعه تابع wp insert post رو (با پارامترهاش) اجرا می‌کنیم یک نوشته انتشار می‌کنه. می‌خوام همزمان با همون نوشته‌ای که نشر پیدا می‌کنه یه مقداری هم به زمینه دل‌خواه اضافه بشه. که پیش‌فرض تابعش اینطوری هست:
    add_post_meta (1 , 'value' , example);
    مقدار 1 هم ID نوشته‌ای هست که قراره بهش مقدار زمینه دل‌خواه بدیم.
    می‌خوام این ID با ID تابع wp insert post ست بشه!

    کاربران زیر به‌خاطر این نوشته تشکر کرده‌اند:
    ~> Mr.vAhiD.DI <~
  • Parsa

    آفلاین
    عضو فعال
    تعداد نوشته‌ها: ۱۹۲۱
    تشکر شده: ۲۶۸۳ بار
    # نوشته شده: ۹ سال پیش
    ۳ بهمن ۱۳۸۹ - ۰۰:۳۴

    اگر بعد از منتشر شدن مطلب هست
    میتونید با کوئری، آخرین ID را بدست آورید

    $c = $wpdb->get_results("SELECT count(*) as c FROM wp_posts"); $c = ($c[0]->c)-1;
    $br_rlist = $wpdb->get_results("SELECT ID FROM wp_posts LIMIT $c,1");
    echo $br_rlist[0]->ID;
    کاربران زیر به‌خاطر این نوشته تشکر کرده‌اند:
    Mostafa - ~> Mr.vAhiD.DI <~
  • گناهکار

    آفلاین
    کلیددار
    تعداد نوشته‌ها: ۳۵۳۵
    تشکر شده: ۲۵۴۴ بار
    # نوشته شده: ۹ سال پیش
    ۳ بهمن ۱۳۸۹ - ۱۳:۴۲

    تابع wp_insert_post وقتی یه نوشته رو به پایگاه‌داده اضافه می‌کنه، ID اون رو برمی‌گردونه، بعد شما از همین عددی که برگردونده شده استفاده می‌کنین و زمینه‌های دلخواه‌تون رو هم اضافه می‌کنین. یعنی به گرفتن کوئری نیازی نیست.

    کاربران زیر به‌خاطر این نوشته تشکر کرده‌اند:
    Mostafa - ~> Mr.vAhiD.DI <~
  • Mostafa

    آفلاین
    ناظم
    تعداد نوشته‌ها: ۵۲۷۶
    تشکر شده: ۵۷۷۷ بار
    # نوشته شده: ۹ سال پیش
    ۳ بهمن ۱۳۸۹ - ۱۳:۵۰

    ممنون پارسا جان, اینجاشو به فکرم نرسیده بود!
    ID آخرین نوشته رو بدست میاره و اگر هم بخوایم ID بعدی که در آینده قرار هست منتشر بشه رو پیدا کنیم کافیه یک واحد بهش اضافه کنیم:
    $current_id = $br_rlist[0]->ID + 1;
    بررسی کردم چه از طریق تابع نوشته ارسال بشه چه از طریق پیش‌خوان! هیچ مشکلی هم از بابت ترتیب ID ها نداریم.
    البته تنها مشکل کوچک این هست که اگر اون برگه‌ای که متغیر current_id درش هست به روز نشه و از طریق پیش‌خوان هم همون موقع نوشته ارسال بشه یک تداخل کوچک بین IDها صورت می‌گیره!

    کاربران زیر به‌خاطر این نوشته تشکر کرده‌اند:
    ~> Mr.vAhiD.DI <~
  • Mostafa

    آفلاین
    ناظم
    تعداد نوشته‌ها: ۵۲۷۶
    تشکر شده: ۵۷۷۷ بار
    # نوشته شده: ۹ سال پیش
    ۳ بهمن ۱۳۸۹ - ۱۴:۱۰

    تابع wp_insert_post وقتی یه نوشته رو به پایگاه‌داده اضافه می‌کنه، ID اون رو برمی‌گردونه، بعد شما از همین عددی که برگردونده شده استفاده می‌کنین و زمینه‌های دلخواه‌تون رو هم اضافه می‌کنین. یعنی به گرفتن کوئری نیازی نیست.

    یه نمونه اینجا دریافت کرده:

    //insert new post
     // Create post object
     $my_post = array();
     $my_post['post_title'] = 'Hello world';
     $my_post['post_content'] = 'This is a sample post';
     $my_post['post_status'] = 'published';
     $my_post['post_author'] = 7; //the id of the author
     $my_post['post_category'] = array(10,12); //the id's of the categories
    
     // Insert the post into the database
     $post_id = wp_insert_post( $my_post ); //store new post id into $post_id
    
    //now add tags to new post
     $tags = array('html', 'css', 'javascript');
     wp_set_object_terms( $post_id, $tags, 'post_tag', true );

    اما 1 شماره بیشتر نشون می‌ده.
    اینم به کار بردم نشد:
    echo wp_insert_post( $post);
    $postهم متغیری هست که از نوع آرایه در تابع wp_insert_post تعریف کردم
    فکر کنم راه‌های ساده‌تری هم باشه.

    کاربران زیر به‌خاطر این نوشته تشکر کرده‌اند:
    ~> Mr.vAhiD.DI <~
  • Parsa

    آفلاین
    عضو فعال
    تعداد نوشته‌ها: ۱۹۲۱
    تشکر شده: ۲۶۸۳ بار
    # نوشته شده: ۹ سال پیش
    ۳ بهمن ۱۳۸۹ - ۱۵:۱۵

    بله، نیاز به کوئری نیست
    برای من درست کار کرد
    تگها هم قرار گرفتند در پست

    کاربران زیر به‌خاطر این نوشته تشکر کرده‌اند:
    ~> Mr.vAhiD.DI <~
  • گناهکار

    آفلاین
    کلیددار
    تعداد نوشته‌ها: ۳۵۳۵
    تشکر شده: ۲۵۴۴ بار
    # نوشته شده: ۹ سال پیش
    ۳ بهمن ۱۳۸۹ - ۱۷:۴۶

    اما 1 شماره بیشتر نشون می‌ده.
    اینم به کار بردم نشد:
    echo wp_insert_post( $post);
    $postهم متغیری هست که از نوع آرایه در تابع wp_insert_post تعریف کردم
    فکر کنم راه‌های ساده‌تری هم باشه.

    من متوجه نمی‌شم، یعنی اون تابع، IDه غیرقابل‌قبول برمی‌گردونه؟ شما تونستین مقداری که اون تابع برمی‌گردونه رو بخونین؟

    کاربران زیر به‌خاطر این نوشته تشکر کرده‌اند:
    ~> Mr.vAhiD.DI <~
  • Mostafa

    آفلاین
    ناظم
    تعداد نوشته‌ها: ۵۲۷۶
    تشکر شده: ۵۷۷۷ بار
    # نوشته شده: ۹ سال پیش
    ۳ بهمن ۱۳۸۹ - ۱۸:۳۸

    من متوجه نمی‌شم، یعنی اون تابع، IDه غیرقابل‌قبول برمی‌گردونه؟ شما تونستین مقداری که اون تابع برمی‌گردونه رو بخونین؟

    کوئری زیر مقدار 3226 رو بر می‌گردونه:

    $c = $wpdb->get_results("SELECT count(*) as c FROM wp_posts"); $c = ($c[0]->c)-1;
    $br_rlist = $wpdb->get_results("SELECT ID FROM wp_posts LIMIT $c,1");
    $current_id =  $br_rlist[0]->ID + 1;
    echo $current_id;

    تابع زیر هم مقدار 2996 رو بر می‌گردونه: (2996 شماره پست جاری هست!)
    echo wp_insert_post( $post);

    تابع زیر هم مقدار 3227 رو بر می‌گردونه:

    //insert new post
     // Create post object
     $my_post = array();
     $my_post['post_title'] = 'Hello world';
     $my_post['post_content'] = 'This is a sample post';
     $my_post['post_status'] = 'published';
     $my_post['post_author'] = 7; //the id of the author
     $my_post['post_category'] = array(10,12); //the id's of the categories
    
     // Insert the post into the database
     echo $post_id = wp_insert_post( $my_post ); //store new post id into $post_id

    حالا از پیش‌خوان, نوشته جدید ایجاد کردم. شمارهاش 3228 شد!

    یک نکته‌ دیگر: هرموقع این صفحه‌ای که این توابع توشون هست رو لود می‌کنم مقادیرشون 1 واحد بیشتر می‌شن!

    شما تونستین مقداری که اون تابع برمی‌گردونه رو بخونین؟

    نه متاسفانه! سعی می‌کنم ببینم می‌شه یا نه.

    کاربران زیر به‌خاطر این نوشته تشکر کرده‌اند:
    ~> Mr.vAhiD.DI <~
  • گناهکار

    آفلاین
    کلیددار
    تعداد نوشته‌ها: ۳۵۳۵
    تشکر شده: ۲۵۴۴ بار
    # نوشته شده: ۹ سال پیش
    ۴ بهمن ۱۳۸۹ - ۰۱:۳۶

    کوئری زیر مقدار 3226 رو بر می‌گردونه

    این کوئری ایراد داره احتمالا، فعلا بهتره با توابع خود وردپرس کار کنین.

    هرموقع این صفحه‌ای که این توابع توشون هست رو لود می‌کنم مقادیرشون 1 واحد بیشتر می‌شن

    خب چون یک نوشته اضافه می‌شه با هر بار اجرای این دستورات.

    چک کردن این‌که کدوم دستور داره درست کار می‌کنه کاری نداره، ببینین شناسه‌ی نوشته‌ای که ایجاد شده، مطابق با کدوم عدد هست.

    کاربران زیر به‌خاطر این نوشته تشکر کرده‌اند:
    Mostafa - ~> Mr.vAhiD.DI <~
  • Mostafa

    آفلاین
    ناظم
    تعداد نوشته‌ها: ۵۲۷۶
    تشکر شده: ۵۷۷۷ بار
    # نوشته شده: ۹ سال پیش
    ۴ بهمن ۱۳۸۹ - ۱۲:۵۳

    خب چون یک نوشته اضافه می‌شه با هر بار اجرای این دستورات. چک کردن این‌که کدوم دستور داره درست کار می‌کنه

    آره, متوجه شدم هرموقع این تابع فراخوانی می‌شه انگاری که post-new.php پیش‌خوان اجرا می‌شه!

    ببینین شناسه‌ی نوشته‌ای که ایجاد شده، مطابق با کدوم عدد هست.

    یکی بیشتر از همه‌ی اینهاست!

    فکر کنم تنها کار این باشه که پیوند یکتا رو از حالت پیش‌فرض خارج کنم و تابع:
    rand()
    رو بدم به یه متغیر و این متغیر رو به wp_insert_post و به add_post_meta بدم!
    فکر کنم مطمئن‌تر باشه دیگه اختلالی هم ایجاد نمی‌کنه!

درباره‌ی این موضوع



برچسب‌ها