새 게시물을 작성하기 전에 카테고리를 선택 하시겠습니까?


11

새 게시물을 작성할 때 편집기를 계속 진행하기 전에 사용자가 먼저 카테고리를 선택하도록하려면 어떻게해야합니까? 기본 컨텐츠설정 하고 싶지만 카테고리를 기반으로하므로 편집기를 표시하기 전에 알아야합니다 (멋진 Ajax 작업을 수행하지 않는 한이 경우에는 그렇게하고 싶지 않습니다).

답변:


11

에 연결 post-new.php하고 category_id요청 매개 변수를 확인 하여이 문제를 해결했습니다 . 존재하지 않으면이 페이지로 다시 제출되는 카테고리 드롭 다운이있는 양식을 표시 한 다음 exit()일반 게시물 양식이 표시되지 않도록 호출하십시오 . 그것이 존재한다면, wp_insert_post카테고리를 추가 할 후크를 설정했습니다 . 새 게시물이 이미 통해 데이터베이스에 작성되기 때문에이 작동 기능 , 우리는 카테고리, 태그, 기타 (메타) 내용을 추가 할 수 있습니다. 그 후 폼은 "신선한"새로운 컨텐츠로 렌더링됩니다.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

여러 사이트에서 기본 스타일을 일부 게시물 카테고리에 추가하는 데 도움이되는 코드를 많이 사용했습니다. 놀라운 "관리"플러그인이있는 사이트에서 사용할 때 약간의 문제가 발생하여 "잘못된 게시물 유형"오류가 발생했습니다. 플러그인 작성자는 "// extract ($ GLOBALS);" 라인 & 문제를 해결했다.
speedypancake
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.