บังคับตัวเลือกหมวดหมู่ก่อนสร้างโพสต์ใหม่หรือไม่


11

ฉันจะบังคับให้ผู้ใช้เลือกหมวดหมู่ก่อนที่จะดำเนินการแก้ไขต่อเมื่อสร้างโพสต์ใหม่ได้อย่างไร ฉันต้องการตั้งค่าเนื้อหาเริ่มต้นบางส่วนแต่นี่เป็นไปตามหมวดหมู่ดังนั้นฉันจำเป็นต้องรู้ก่อนที่จะแสดงตัวแก้ไข (เว้นแต่ฉันจะทำสิ่งอาแจ็กซ์แฟนซี แต่ในกรณีนี้ฉันไม่ต้องการทำเช่นนั้น)

คำตอบ:


11

ฉันแก้ไขสิ่งนี้โดยการต่อเข้าpost-new.phpและตรวจสอบcategory_idพารามิเตอร์คำขอ หากไม่มีอยู่ฉันจะแสดงแบบฟอร์มที่มีหมวดหมู่แบบเลื่อนลงที่ส่งกลับมาที่หน้านี้จากนั้นโทรติดต่อexit()เพื่อที่แบบฟอร์มโพสต์ปกติจะไม่ปรากฏ หากมีอยู่ฉันตั้งค่าเบ็ดเพื่อwp_insert_postที่จะเพิ่มหมวดหมู่ งานนี้เพราะโพสต์ใหม่จะถูกสร้างขึ้นแล้วในฐานข้อมูลผ่านทางฟังก์ชั่นและเราสามารถเพิ่มหมวดหมู่, แท็กหรืออื่น ๆ (meta) เนื้อหา แบบฟอร์มจะแสดงหลังจากนี้ด้วยเนื้อหาใหม่ "สด"get_default_post_to_edit()

add_filter( 'load-post-new.php', 'wpse14403_load_post_new' );
function wpse14403_load_post_new()
{
    $post_type = 'post';
    if ( isset( $_REQUEST['post_type'] ) ) {
        $post_type = $_REQUEST['post_type'];
    }

    // Only do this for posts
    if ( 'post' != $post_type ) {
        return;
    }

    if ( array_key_exists( 'category_id', $_REQUEST ) ) {
        add_action( 'wp_insert_post', 'wpse14403_wp_insert_post' );
        return;
    }

    // Show intermediate screen
    extract( $GLOBALS );
    $post_type_object = get_post_type_object( $post_type );
    $title = $post_type_object->labels->add_new_item;

    include( ABSPATH . 'wp-admin/admin-header.php' );

    $dropdown = wp_dropdown_categories( array(
        'name' => 'category_id[]',
        'hide_empty' => false,
        'echo' => false,
    ) );

    $category_label = __( 'Category:' );
    $continue_label = __( 'Continue' );
    echo <<<HTML
<div class="wrap">
    <h2>{$title}</h2>

    <form method="get">
        <table class="form-table">
            <tbody>
                <tr valign="top">
                    <th scope="row">{$category_label}</th>
                    <td>{$dropdown}</td>
                </tr>
                <tr>
                    <td></td>
                    <th><input name="continue" type="submit" class="button-primary" value="{$continue_label}" /></th>
            </tbody>
        </table>
        <input type="hidden" name="post_type" value="{$post_type}" />
    </form>
</div>
HTML;
    include( ABSPATH . 'wp-admin/admin-footer.php' );
    exit();
}

// This function will only be called when creating an empty post,
// via `get_default_post_to_edit()`, called in post-new.php
function wpse14403_wp_insert_post( $post_id )
{
    wp_set_post_categories( $post_id, $_REQUEST['category_id'] );
}

ดี ฉันจะต้องทำสิ่งที่คล้ายกันเร็ว ๆ นี้และสงสัยว่าฉันจะทำมันอย่างไร!
MikeSchinkel

ขออภัยมันไม่ทำงาน - ฉันเพิ่มข้อความใน post-new.php แต่ไม่มีอะไรเกิดขึ้น ความคิดใด ๆ ขอบคุณ

1
@kiro: คุณไม่ควรเพิ่มรหัสนี้ในpost-new.phpแต่ในธีมของคุณfunctions.phpหรือในไฟล์ปลั๊กอิน
Jan Fabry

@JanFabry ทางออกที่ดี สิ่งที่ฉันกำลังมองหา ขอบคุณ!
rofflox

ฉันใช้โค้ดนี้ในเว็บไซต์หลายไซต์ของฉันเพื่อช่วยเพิ่มสไตล์เริ่มต้นให้กับบางหมวดหมู่โพสต์ ฉันพบปัญหาเล็กน้อยเมื่อใช้งานบนไซต์ที่มีปลั๊กอิน "adminulate" ที่น่าทึ่งซึ่งทำให้เกิดข้อผิดพลาด "ประเภทการโพสต์ที่ไม่ถูกต้อง" ผู้เขียนปลั๊กอินแนะนำให้แสดงความคิดเห็น "/ สารสกัด ($ GLOBALS);" บรรทัด & ที่แก้ไขปัญหา
speedypancake
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.