在创建新帖子之前强制选择类别?

时间:2011-04-10 作者:Jan Fabry

创建新帖子时,如何强制用户在继续编辑之前先选择类别?我想set some default content, 但这是基于类别的,所以在显示编辑器之前我需要知道这一点(除非我做了一些喜欢的Ajax东西,但在这种情况下我不想这样做)。

1 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

我通过post-new.php, 并检查category_id 请求参数。如果它不存在,我会显示一个带有类别下拉列表的表单,提交回该页面,然后调用exit() 因此,常规post表单不会显示。如果存在,我会为wp_insert_post 这将添加类别。这是因为已经通过在数据库中创建了一篇新文章the get_default_post_to_edit() function, 我们可以添加类别、标签或其他(元)内容。表单在此之后呈现为“新鲜”的新内容。

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\'] );
}

结束

相关推荐

在WordPress中筛选分类术语的Get_Categories()

我只想在(自定义)帖子属于某个类别且region=该帖子的$name时显示该类别。因此,例如,我有一个自定义帖子(类型“business”),在子类别“pizzerias”(父类别“food”)和区域“Rotterdam”(自定义分类:“region”,自定义分类术语:“Rotterdam”)中分别命名为“Mamma Mia”。=>显示类别“pizzerias”(和父类别“food”)只是,我不知道如何做到这一点。如果你能帮我解决这个难题,我将不胜感激。<?php // $