Özel gönderi türü için yeni gönderi durumu


13

Özel bir yazı türüm var recipes. Haber veritabanına otomatik olarak toplamak için bir cron komut dosyası kullanıyorum.

Şu anda içe aktarılıyor ve 'İncelenmeyi Bekliyor' olarak kaydediliyor. AggregatedYayınlanacak tüm toplu haberleri listeleyen başka bir gönderi durumu oluşturmak mümkün müdür ?

register_post_statusFonksiyonu kullanmayı denedim , ancak bu işe yaramadı:

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

Bununla ilgili yardım için teşekkürler.


Kodun doğru olduğunu düşünüyorum. Belki bu kaynağı başka bir işlevde buna çağırmak için kullanabilirsiniz. Add_action () ne zaman çalıştırılır?
13'te

Cevabınızı daha ayrıntılı olarak açıklar mısınız? Teşekkürler!
dclawson

Add_action (bir sınıf ya da işlev içinde 'init', orada başka bir kanca hakkında çağırırsınız. Bunu lat için başlatmanız ve kanca
init'i

Bu sorunu nasıl çözdünüz? Şimdi aynı problemim var. Kullanıcının Stati listesinden (Pendig Reveiw, Taslak, NEW_CUSTOM_STATUS) seçmesine izin veren özel yazı yönetici alanının açılır listesine yeni özel durum eklemek istiyorum ...
Greeso

Yanıtlar:


9

Burada nasıl yapılacağına dair Adım Adım harika bir açıklama var http://jamescollings.co.uk/blog/wordpress-create-custom-post-status/

Özel yayın durumunuzu açılır menüye eklemek için, tema işlevi komut dosyasına aşağıdakileri eklemeniz yeterlidir:

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

Bu özel mesaj durumu 5 dakika içinde yukarı ve çalışan var, bana bir sürü zaman kazandırdı!


1
Bağlantı koptu. İşte archive.org'daki en son sürüm .
rinogo

@rinogo teşekkürler adam, verdiğiniz archive.org bağlantısına
geçildi


1

Özel gönderi türü "tarifleri" için "toplu" bir gönderi durumu kaydedin:

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

"Yemek tarifleri" özel gönderi düzenleme ekranının yayın meta kutusunda, açılır listeye özel gönderi durumu eklenir ve seçilen gönderi durumu "toplanmışsa" "Taslak Kaydet" düğmesi etiketini değiştirir:

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

});

Özel gönderi durumunu, özel gönderi yönetici ızgarasının hızlı düzenleme ekranına ekleyin:

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

Özel gönderi durumu toplamını özel gönderi yöneticisi ızgarasında görüntüleyin:

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

Tam aradığım şey. Ancak, toplu gönderi düzenleme durumu açılır listesindeki özel gönderi durumunu hala kaçırıyor.
martin schwartz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.