it-swarm-eu.dev

Jak nastavit stav pošty na konceptu, pokud je starší než dnes

V předešlé otázce jsem potřeboval nastavit budoucí datovaný příspěvek (typ vlastního příspěvku) tak, jak byl publikován na úložišti místo jeho naplánování.

V den, kdy je naplánováno, bych ho chtěl znovu nastavit jako koncept. Snažila jsem se zavěsit do init a zabalit ji do kontroly, pokud jde o typ pošty. Myslel jsem, že to bude ve srovnání s časem serveru a pak nastaví stav na koncept, pokud byl starší než serverový čas.

Jako hrubý obrys:

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

Zde a aktualizujte kód, se kterým pracuji.

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' );

Je to dostat příspěvky, které potřebuji, a dává mi čas serveru, ale nedělá nic kolem toho, co můžu říct.

2
curtismchale

Váš dotaz vám nedává ID příspěvku, dává vám celý příspěvek. SELECT * vrátí všechny sloupce, ID, post_status, atd. Nastavení $my_post['ID'] = $a v tomto případě pro vás nic neudělá.

Zkuste místo toho použít: $my_post['id'] = $a->ID;. To by mělo přesně nastavit vaše ID před voláním wp_update_post() a měli byste být v podnikání.

Kromě toho nevidím žádné problémy s tím, co děláte ... až na to, že dotazování databáze pokaždé, když je web načten, může nakonec vytvořit problémy s výkonem. Namísto toho, abych tento proces automatizoval, jsem zřídil hodinovou chronickou práci ... pak to nezávisí na uživatelském provozu ani ho zpomaluje.

1
EAMann