it-swarm.asia

كيفية تعيين حالة النشر إلى المسودة

في سؤال سابق ، كنت بحاجة إلى تعيين منشور مؤرخ في المستقبل (نوع المنشور المخصص) كما هو منشور عند الحفظ بدلاً من جدولته.

في التاريخ "مجدول" ، أود تعيينه كمسودة مرة أخرى. لقد كنت أحاول أن أربط بين الحرف الأول ولفه في حالة التحقق من نوع المنشور. كنت أحسب أنه سيتم مقارنة وقت الخادم ثم ضبط الحالة على المسودة إذا كان أقدم من وقت الخادم.

كمخطط تقريبي:

if custom post type
  get_the_time of post
  get the server time
  if post time is older than server time set status to draft
endif

هنا وتحديث مع بعض التعليمات البرمجية أعمل معها.

function sfn_show_expire(){
    global $wpdb;
    $server_time = date('mdy');
    $result = $wpdb->get_results("SELECT * FROM wp_posts WHERE post_type = 'show' AND post_status = 'publish'");
    if( !empty($result)) foreach ($result as $a){
        $show_time = get_the_time('mdy', $a->ID );
        if ( $server_time > $show_time){
            $my_post = array();
            $my_post['ID'] = $a->ID;
            $my_post['post_status'] = 'draft';
            wp_update_post( $my_post );
        }
    } // end foreach
}
add_action( 'init', 'sfn_show_expire' );

إنه يحصل على المنشورات التي أحتاجها ويمنحني وقتًا للخادم ولكنه لا يقوم بأي شيء في الماضي بقدر ما أستطيع أن أخبره.

2
curtismchale

لا يمنحك استعلامك معرّف منشور ، بل يمنحك منشورًا كاملاً. إرجاع SELECT * جميع الأعمدة ، ID ، post_status ، إلخ. لذا فإن إعداد $my_post['ID'] = $a لا يفعل أي شيء لك في هذه الحالة.

حاول استخدام: $my_post['id'] = $a->ID; بدلاً من ذلك. يجب أن يحدد هويتك بدقة قبل الاتصال بـ wp_update_post() ويجب أن تكون في العمل.

بصرف النظر عن ذلك ، لا أرى أي مشاكل فيما تفعله ... إلا أن الاستعلام عن قاعدة البيانات في كل مرة يتم فيها تحميل الموقع قد يؤدي في النهاية إلى حدوث مشكلات في الأداء. لقد قمت بإعداد وظيفة chron كل ساعة بدلاً من ذلك لأتمتة العملية ... ثم لا تعتمد على حركة مرور المستخدم أو تبطئها.

1
EAMann