Status kiriman baru untuk jenis kiriman khusus

13

Saya memiliki jenis posting khusus recipes. Saya menggunakan skrip cron untuk secara otomatis mengumpulkan berita ke dalam basis data.

Saat ini sedang diimpor dan disimpan sebagai 'Tinjauan Tertunda'. Apakah mungkin untuk membuat status kiriman lain Aggregatedyang disebut yang akan mencantumkan semua berita agregat yang akan dipublikasikan?

Saya mencoba menggunakan register_post_statusfungsi ini, namun sepertinya ini tidak berhasil:

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

Terima kasih atas bantuannya.

dclawson
sumber
Saya pikir kodenya benar. Mungkin Anda memiliki sumber ini di fungsi lain untuk memanggil ini. Kapan menjalankan add_action ()?
bueltge
Bisakah Anda jelaskan jawaban Anda lebih terinci? Terima kasih!
dclawson
Apakah add_action ('init' di dalam kelas atau fungsi, di sana Anda menelepon tentang hook lain. Mungkin saja, Anda memulai ini ke lat dan hook init tidak dapat dipecat.
bueltge
Bagaimana Anda mengatasi masalah ini? Saya memiliki masalah yang sama persis sekarang. Saya ingin menambahkan status khusus baru ke daftar drop-down area admin pos-kustom, yang memungkinkan pengguna untuk memilih (Pendig Reveiw, Draft, NEW_CUSTOM_STATUS) dari daftar Stati ...
Greeso

Jawaban:

9

Ada deskripsi Langkah demi langkah yang hebat tentang bagaimana melakukannya di sini http://jamescollings.co.uk/blog/wordpress-create-custom-post-status/

Untuk menambahkan status posting khusus Anda ke menu drop-down, cukup tambahkan berikut ini ke skrip fungsi tema Anda:

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

Dengan ini Anda memiliki status pos kustom Anda dan berjalan dalam 5 menit, menyelamatkan saya banyak waktu!

Larzan
sumber
1
Tautan rusak. Ini versi terbaru di archive.org .
rinogo
@rinogo terima kasih, beralih ke tautan archive.org yang Anda berikan
Larzan
7

Kode Anda harus sehat, dan harus menambahkan status yang diinginkan ke $ global wp_post_statuses array global.

Namun, jika Anda mengharapkannya muncul di drop-down admin, ini adalah masalah yang berkelanjutan: https://core.trac.wordpress.org/ticket/12706

vancoder
sumber
1

Daftarkan status kiriman "teragregasi" untuk jenis kiriman khusus "resep":

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

Dalam metabox publikasikan "resep" pada layar edit posting, tambahkan status posting khusus dalam dropdown dan ubah label tombol "Simpan Draf" jika status posting yang dipilih "teragregasi":

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

});

Tambahkan status posting khusus di layar edit cepat dari kisi admin posting kustom:

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>";
    }
});

Tampilkan total status pos kustom di kisi admin pos kustom:

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
sumber
Persis apa yang saya cari. Namun, masih merindukan status pos kustom di dropdown status edit postingan massal.
martin schwartz