नई पोस्ट बनाने से पहले फोर्स कैटेगरी का चुनाव?


11

नई पोस्ट बनाते समय संपादक को जारी रखने से पहले मैं उपयोगकर्ता को पहले एक श्रेणी चुनने के लिए कैसे मजबूर कर सकता हूं? मैं कुछ डिफ़ॉल्ट सामग्री सेट करना चाहता हूं , लेकिन यह श्रेणी पर आधारित है, इसलिए मुझे यह जानने की आवश्यकता है कि संपादक को दिखाने से पहले (जब तक मैं कुछ फैंसी अजाक्स सामान नहीं करता, लेकिन इस मामले में मैं ऐसा नहीं करना चाहता)।

जवाबों:


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

अच्छा लगा। मुझे जल्द ही कुछ ऐसा ही करने की जरूरत है और सोच रहा हूं कि मैं यह कैसे करूंगा!
माइकस्किंकल

क्षमा करें, लेकिन यह काम नहीं कर रहा है - मैंने पोस्ट को new -php में जोड़ा है लेकिन ऐसा कुछ नहीं होता है। कोई विचार ? धन्यवाद

1
@kiro: आपको इस कोड post-new.phpको अपने विषय में functions.phpया प्लगइन फ़ाइल में नहीं जोड़ना चाहिए ।
Jan Fabry

@JanFabry महान समाधान। बस मैं जो ढूंढ रहा हूं। धन्यवाद!
रफ्लोक्स

कुछ कोड श्रेणियों में कुछ डिफ़ॉल्ट स्टाइलिंग को जोड़ने में मदद करने के लिए मैंने अपने मल्टीसाइट में बहुत सारे कोड का उपयोग किया है। हालांकि, "अद्भुत" व्यवस्थापक "प्लगइन" के साथ साइटों पर इसका उपयोग करते समय मैंने एक मामूली मुद्दे पर भाग लिया, जिसने "अमान्य पोस्ट प्रकार" त्रुटि को फेंक दिया। प्लगइन लेखक ने सुझाव दिया कि "// extract ($ GLOBALS);" लाइन और इस मुद्दे को ठीक किया।
स्पीडपेंक करें
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.