Desativar completamente o processo de salvar postagem

4

Eu preciso de uma maneira de desativar completamente o processo de salvamento usando um action/filter . Algo que funcione (por exemplo, :) nos ganchos query , posts_clauses ou wp_insert_post/save_post/update_post .

Até agora, eu só tentei return ''; , o que me dá muitos erros para valores ausentes de postar partes de objetos na interface do usuário do administrador.

Isso deve acontecer "silenciosamente", por isso, nenhum erro será lançado quando php_error/WP_DEBUG e esses forem definidos como TRUE/On .

Btw: Eu sou não perguntando como desabilitar o recurso de salvamento automático.

    
por kaiser 12.05.2012 / 20:04

2 respostas

5
function disable_save( $maybe_empty, $postarr ) {
    $maybe_empty = true;

    return $maybe_empty;
}
add_filter( 'wp_insert_post_empty_content', 'disable_save', 999999, 2 );

Como wp_insert_post_empty_content está definido como true, o WordPress acha que não há título nem conteúdo e interrompe a atualização da postagem.

EDIT: Uma variante ainda mais curta seria:

add_filter( 'wp_insert_post_empty_content', '__return_true', PHP_INT_MAX -1, 2 );
    
por Rob Vermeer 12.05.2012 / 23:30
2

O motivo pelo qual você recebe avisos para interromper inserções com o filtro wp_insert_post_empty_content , conforme mencionado em seu comentário, no enlace answer, é que: Para post-new.php , o processo de rascunho automático precisa obter $post->ID a get_default_post_to_edit() e wp_insert_post() e usar esse ID do retorno $ post. Ou seja, as páginas "Adicionar nova postagem" criam e obtêm um novo "registro de postagem" todas as vezes.

Infelizmente wp_insert_post () retorna 0 se você parar o processo de salvamento em vez de um ID de postagem esperado. Em outras palavras, você não pode parar "Rascunhos automáticos" com o filtro "wp_insert_post_empty_content". E se você usar o filtro, você deve deixar "os rascunhos automáticos passarem para evitar o aviso do PHP. É um erro muito ruim.

A única maneira que eu encontrei para parar de criar novos registros de auto-rascunhos inutilmente e contornar este bug é, para estender a classe wpdb com um plugin drop-in db.php:

class wpdb_ext extends wpdb
{
  function insert($table, $data, $format = null) {
    if (isset($data['post_status']) && $data['post_status'] === "auto-draft" && ($pa = (int)$data['post_author'])
        && ($id = $this->get_var("SELECT ID FROM $table WHERE post_status = 'auto-draft' AND post_author = $pa LIMIT 1"))){
        //fake insert id and return id of existing auto-draft as base for New post page.
        return $this->insert_id = (int)$id;
    }
    return parent::insert($table, $data, $format = null);//else do actual insert
  }
}
$wpdb = new wpdb_ext(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);//overload wpdb

Isso mantém apenas um rascunho automático por autor e evita que novos registros de rascunho automático desnecessários desperdiçam / ignorem incrementos de ID para nada.

    
por hexalys 05.04.2014 / 06:52