it-swarm.com.de

Wie ändere ich den Post-Status von "Veröffentlichen" in "Entwurf" mithilfe von Hook in WordPress?

Ich möchte den Status eines bereits veröffentlichten Beitrags anhand seiner ID in einen Entwurf ändern.

   add_action( 'save_post', 'change_post_status', 1 );
function change_post_status( $post_id ){
    $my_post = array(
        'ID' => 1,
        'post_status' => 'draft',
    );
    // unhook this function so it doesn't loop infinitely
    remove_action('save_post', 'change_post_status');
    if( $post_id == 1 ){
        wp_update_post( $my_post );
    }
    // re-hook this function
    add_action('save_post', 'change_post_status');
}

Ich möchte den Status eines bestimmten Beitrags ändern, dessen ID = 1 in Entwurf geändert werden soll. Dies funktioniert, führt aber zu

Maximale Funktionsverschachtelungsstufe von '100' erreicht, Abbruch!

warum wird dieser Fehler angezeigt?

Was ich denke, ist, dass es läuft, wenn der Beitrag aktualisiert oder gespeichert wird. Ich möchte einfach die Funktion unabhängig von der Aktion zum Speichern oder Aktualisieren ausführen, wie bei wp_init oder wp_admin oder admin_init. Ist dies möglich?.

1
Ghanashyam Naik

In deinem functions.php:

add_action('publish_post', 'check_user_publish', 10, 2);

function check_user_publish ($post_id, $post) {

    if($post_id == 1){
    $query = array(
        'ID' => $post_id,
        'post_status' => 'draft',
    );
    wp_update_post( $query, true );

    }

}
1
jas

Um einen Haken zu entfernen, muss er dieselbe Priorität haben wie beim Hinzufügen des Hakens. Sie add_action mit einer Priorität von 1. Wenn Sie die Aktion entfernen möchten, müssen Sie sie mit einer Priorität von 1 entfernen. Siehe den Codex .

add_action( 'save_post', 'change_post_status', 1 );
function change_post_status( $post_id ){
  $my_post = array(
    'ID' => 1,
    'post_status' => 'draft',
  );
  // unhook this function, making sure to use the same priority, so it doesn't loop infinitely
  remove_action('save_post', 'change_post_status', 1 );
  if( $post_id == 1 ){
    wp_update_post( $my_post );
  }
  // re-hook this function with the initial priority
  add_action('save_post', 'change_post_status', 1 );
}
0
Nathan Johnson