สถานะโพสต์ใหม่สำหรับประเภทโพสต์ที่กำหนดเอง


13

recipesฉันมีประเภทโพสต์ที่กำหนดเอง ฉันกำลังใช้สคริปต์ cron เพื่อรวบรวมข่าวโดยอัตโนมัติลงในฐานข้อมูล

ขณะนี้กำลังนำเข้าและบันทึกเป็น 'รอการตรวจสอบ' เป็นไปได้ไหมที่จะสร้างสถานะโพสต์อื่นที่เรียกว่าAggregatedซึ่งจะแสดงรายการข่าวรวมทั้งหมดที่จะเผยแพร่?

ฉันพยายามใช้register_post_statusฟังก์ชั่นนี้ไม่ได้ผล:

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

ขอบคุณสำหรับความช่วยเหลือในสิ่งนี้


ฉันคิดว่ารหัสถูกต้อง บางทีคุณอาจมีแหล่งข้อมูลนี้ในฟังก์ชันอื่นเพื่อเรียกสิ่งนี้ เมื่อใดที่เรียกใช้ add_action ()
bueltge

คุณช่วยอธิบายคำตอบของคุณในรายละเอียดเพิ่มเติมได้ไหม? ขอบคุณ!
dclawson

เป็น add_action ('init' ในชั้นเรียนหรือฟังก์ชั่นที่คุณเรียกเกี่ยวกับเบ็ดอื่น ๆ เป็นไปได้ว่าคุณเริ่มต้นนี้เพื่อ lat และตะขอ init ไม่สามารถยิงได้
bueltge

คุณแก้ไขปัญหานี้ได้อย่างไร ฉันมีปัญหาเดียวกันตอนนี้ ฉันชอบที่จะเพิ่มสถานะที่กำหนดเองใหม่ลงในรายการแบบหล่นลงของพื้นที่ผู้ดูแลระบบโพสต์ที่กำหนดเองที่ช่วยให้ผู้ใช้เลือก (Pendig Reveiw, ร่าง, NEW_CUSTOM_STATUS) จากรายการ Stati ...
Greeso

คำตอบ:


9

มีคำอธิบายทีละขั้นตอนที่ดีเกี่ยวกับวิธีการทำที่นี่http://jamescollings.co.uk/blog/wordpress-create-custom-post-status/

หากต้องการเพิ่มสถานะโพสต์ที่กำหนดเองของคุณในเมนูแบบเลื่อนลงเพียงเพิ่มสิ่งต่อไปนี้ในสคริปต์ฟังก์ชันธีมของคุณ:

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

ด้วยสิ่งนี้คุณมีสถานะโพสต์ที่กำหนดเองของคุณและทำงานใน 5 นาทีช่วยให้ฉันประหยัดเวลา!


1
ลิงก์เสีย นี่เป็นรุ่นล่าสุดบน archive.org
rinogo

@rinogo ขอบคุณคนเปลี่ยนไปที่ลิงค์ archive.org ที่คุณให้ไว้
Larzan

7

รหัสของคุณควรเป็นเสียงและควรเพิ่มสถานะที่ต้องการลงในอาร์เรย์ส่วนกลางของ $ wp_post_statuses

หากคุณคาดหวังว่ามันจะปรากฏในดรอปดาวน์ของผู้ดูแลระบบนี่เป็นปัญหาต่อเนื่อง: https://core.trac.wordpress.org/ticket/12706


1

ลงทะเบียนสถานะโพสต์ "รวม" สำหรับโพสต์ที่กำหนดเอง "สูตร":

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

ในหน้าจอแก้ไขโพสต์ที่กำหนดเอง "สูตรอาหาร" ของประกาศเผยแพร่ metabox เพิ่มสถานะโพสต์ที่กำหนดเองในเมนูแบบเลื่อนลงและเปลี่ยนป้ายกำกับปุ่ม "บันทึกแบบร่าง" หากสถานะการโพสต์ที่เลือกคือ "รวม":

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

});

เพิ่มสถานะโพสต์ที่กำหนดเองในหน้าจอแก้ไขด่วนของกริดผู้ดูแลระบบโพสต์ที่กำหนดเอง:

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

แสดงผลรวมสถานะโพสต์ที่กำหนดเองในตารางผู้ดูแลระบบโพสต์ที่กำหนดเอง:

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

สิ่งที่ฉันกำลังมองหา อย่างไรก็ตามมันยังคงพลาดสถานะโพสต์ที่กำหนดเองในรายการแบบเลื่อนลงแก้ไขสถานะจำนวนมาก
martin schwartz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.