新しい投稿を作成する前にカテゴリの選択を強制しますか?


11

新しい投稿を作成するときに、エディターに進む前に、ユーザーにカテゴリを最初に選択させるにはどうすればよいですか?デフォルトのコンテンツをいくつか設定したいのですが、これはカテゴリーに基づいているため、エディターを表示する前にそのことを知っておく必要があります(私が特別なAjaxの機能を実行する場合を除きますが、この場合は実行しません)。

回答:


11

これを解決するには、にフックしpost-new.phpcategory_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、2011

申し訳ありませんが、機能していません-post-new.phpにテキストを追加しましたが、何も起こりません。何か案は ?ありがとう

1
@kiro:このコードをに追加するのではなくpost-new.php、テーマfunctions.phpまたはプラグインファイルに追加してください。
Jan Fabry

@JanFabry素晴らしいソリューション。ちょうど私が探しているもの。ありがとう!
rofflox 2012

いくつかの投稿カテゴリにデフォルトのスタイリングを追加するのに役立つように、マルチサイトでコードを使用しています。驚くべき「管理」プラグインを使用しているサイトで使用すると、「無効な投稿タイプ」エラーが発生して、少し問題が発生しました。プラグインの作者は、「// extract($ GLOBALS);」をコメント化することを提案しました ライン&それは問題を修正しました。
speedypancake
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.