Yeni yayın oluşturmadan önce kategori seçimini zorunlu kılsın mı?


11

Yeni bir yayın oluştururken editöre devam etmeden önce kullanıcıyı bir kategori seçmeye nasıl zorlayabilirim? Bazı varsayılan içerik ayarlamak istiyorum , ancak bu kategoriye dayanmaktadır, bu yüzden editörü göstermeden önce bilmeliyim (bazı süslü Ajax şeyler yapmadıkça, ancak bu durumda bunu yapmak istemiyorum).

Yanıtlar:


11

Ben içine çengel post-new.phpve bir category_idistek parametresi kontrol ederek bu çözüldü . Eğer yoksa, bu sayfaya geri gönderen bir kategori açılır listesiyle bir form görüntülerim ve sonra exit()normal yazı formunun görüntülenmemesi için çağırırım . Varsa wp_insert_post, kategori ekleyecek bir kanca ayarladım . Bu , get_default_post_to_edit()işlev aracılığıyla veritabanında zaten yeni bir yazı oluşturulduğu ve kategoriler, etiketler veya diğer (meta) içerik ekleyebileceğimiz için çalışır . Form bundan sonra "yeni" yeni içerikle oluşturulur.

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

Güzel. Yakında benzer bir şey yapmam gerekecek ve nasıl yapacağımı merak ediyorum!
MikeSchinkel

Üzgünüz, ama işe yaramıyor - metni post-new.php dosyasına ekledim ama hiçbir şey olmuyor. Herhangi bir fikir ? Teşekkür

1
@kiro: Bu kodu post-new.php, temanızın içine functions.phpveya bir eklenti dosyasına eklememelisiniz .
Jan Fabry

@JanFabry Harika bir çözüm. Tam aradığım şey. Teşekkürler!
rofflox

Bazı kod kategorilerine bazı varsayılan stilleri eklemek için çok sitemde kullanıyorum. Ben bir "geçersiz yazı tipi" hatası attı olsa da, şaşırtıcı "yönetmek" eklentisi ile sitelerde kullanırken hafif bir sorunla karşılaştım. Eklenti yazarı "// extract ($ GLOBALS);" hattı ve bu sorunu çözdü.
speedypancake
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.