Novo status da postagem para o tipo de postagem personalizada

13

Eu tenho um tipo de postagem personalizado recipes. Estou usando um script cron para agregar automaticamente as notícias no banco de dados.

No momento, ele está sendo importado e salvo como 'Revisão pendente'. É possível criar outro status de postagem chamado Aggregatedque listará todas as notícias agregadas a serem publicadas?

Eu tentei usar a register_post_statusfunção, no entanto, isso não parecia funcionar:

function custom_post_status(){
    register_post_status( 'aggregated', array(
        'label'                     => _x( 'Aggregated', 'recipes' ),
        'public'                    => false,
        'exclude_from_search'       => true,
        'show_in_admin_all_list'    => true,
        'show_in_admin_status_list' => true,
        'label_count'               => _n_noop( 'Aggregated <span class="count">(%s)</span>', 'Aggregated <span class="count">(%s)</span>' ),
    ) );
}
add_action( 'init', 'custom_post_status' );

Obrigado pela ajuda com isso.

dclawson
fonte
Eu acho que o código está certo. Talvez você tenha essa fonte em outra função para chamar isso. Quando executar o add_action ()?
bueltge
Você poderia explicar sua resposta com mais detalhes? obrigado!
dclawson
É o add_action ('init' dentro de uma classe ou função, aí você chama sobre outro gancho. É possível que você inicie isso em lat e o gancho init não pode nem é acionado.
#
Como você resolveu esse problema? Eu tenho exatamente o mesmo problema agora. Eu gostaria de adicionar o novo status personalizado à lista suspensa de área de administração do costume-post para baixo, que permite ao usuário selecionar (Pendig Reveiw, Draft, NEW_CUSTOM_STATUS) da lista de Stati ...
Greeso

Respostas:

9

Há uma excelente descrição passo a passo sobre como fazer isso aqui http://jamescollings.co.uk/blog/wordpress-create-custom-post-status/

Para adicionar seu status de postagem personalizado ao menu suspenso, basta adicionar o seguinte ao script de função de seus temas:

add_action('admin_footer-post.php', 'jc_append_post_status_list');
function jc_append_post_status_list(){
 global $post;
 $complete = '';
 $label = '';
 if($post->post_type == 'recipes'){
      if($post->post_status == 'aggregated'){
           $complete = ' selected=\"selected\"';
           $label = '<span id=\"post-status-display\"> Aggregated</span>';
      }
      echo '
      <script>
      jQuery(document).ready(function($){
           $("select#post_status").append("<option value=\"aggregated\" '.$complete.'>Aggregated</option>");
           $(".misc-pub-section label").append("'.$label.'");
      });
      </script>
      ';
  }
}

Com isso, você tem seu status de postagem personalizado em funcionamento em 5 minutos, economizando muito tempo!

Larzan
fonte
1
Link quebrado. Aqui está a versão mais recente em archive.org .
Rinogo 01/08/19
@rinogo graças homem, ligado ao link archive.org você forneceu
Larzan
7

Seu código deve ser sólido e deve adicionar o status desejado à matriz global $ wp_post_statuses.

Se você espera que ele apareça no menu suspenso do administrador, no entanto, este é um problema contínuo: https://core.trac.wordpress.org/ticket/12706

vancoder
fonte
1

Registre um status de postagem "agregado" para o tipo de postagem personalizado "receitas":

register_post_status( 'aggregated', array(
                    'label'                     => _x( 'Aggregated ', 'post status label', 'bznrd' ),
                    'public'                    => true,
                    'label_count'               => _n_noop( 'Aggregated s <span class="count">(%s)</span>', 'Aggregated s <span class="count">(%s)</span>', 'plugin-domain' ),
                    'post_type'                 => array( 'recipes' ), // Define one or more post types the status can be applied to.
                    'show_in_admin_all_list'    => true,
                    'show_in_admin_status_list' => true,
                    'show_in_metabox_dropdown'  => true,
                    'show_in_inline_dropdown'   => true,
                    'dashicon'                  => 'dashicons-businessman',
                ) );

Na metabox de publicação da tela de pós-edição personalizada "receitas", adicione o status da postagem personalizada no menu suspenso e altere o rótulo do botão "Salvar rascunho" se o status da postagem selecionado for "agregado":

add_action('admin_footer-post.php',function(){

    global $post;
    $complete = '';
    $label = '';

    if($post->post_type == 'recipes') {

        if ( $post->post_status == 'aggregated' ) {
            $complete = ' selected=\"selected\"';
            $label    = 'Aggregated';
        }

        $script = <<<SD


       jQuery(document).ready(function($){
           $("select#post_status").append("<option value=\"aggregated\" '.$complete.'>Aggregated</option>");

           if( "{$post->post_status}" == "aggregated" ){
                $("span#post-status-display").html("$label");
                $("input#save-post").val("Save Aggregated");
           }
           var jSelect = $("select#post_status");

           $("a.save-post-status").on("click", function(){

                if( jSelect.val() == "aggregated" ){

                    $("input#save-post").val("Save Aggregated");
                }
           });
      });


SD;

        echo '<script type="text/javascript">' . $script . '</script>';
    }

});

Adicione o status de postagem personalizada na tela de edição rápida da grade de administração de postagem personalizada:

add_action('admin_footer-edit.php',function() {
    global $post;
    if( $post->post_status == 'recipes' ) {
        echo "<script>
    jQuery(document).ready( function() {
        jQuery( 'select[name=\"_status\"]' ).append( '<option value=\"aggregated\">Aggregated</option>' );
    });
    </script>";
    }
});

Exiba o total do status da postagem personalizada na grade de administração da postagem personalizada:

add_filter( 'display_post_states', function( $statuses ) {
    global $post;

    if( $post->post_type == 'recipes') {
        if ( get_query_var( 'post_status' ) != 'aggregated' ) { // not for pages with all posts of this status
            if ( $post->post_status == 'aggregated' ) {
                return array( 'Aggregated' );
            }
        }
    }
    return $statuses;
});
sudip
fonte
Exatamente o que eu estava procurando. No entanto, ele ainda perde o status de postagem personalizada na lista suspensa de status de edição em massa.
martin schwartz