किसी विशिष्ट पोस्ट प्रकार के सभी पोस्ट शीर्षक कैसे प्राप्त करें?


9

मैं एक चयनित तत्व के भीतर शीर्षकों का उपयोग करना चाहूंगा, जो मैं ग्राहक पक्ष को प्रतिध्वनित कर रहा हूं। क्या सबसे अच्छा तरीका होगा यह करने का?


प्रश्न बहुत स्पष्ट नहीं है। क्या आप विशिष्ट पोस्ट प्रकार के तहत सभी पदों के लिए सभी पोस्ट शीर्षक वापस करने की कोशिश कर रहे हैं? क्या वह सही है?
अहमद फौद

माफ़ करना! हां ठीक है, मैंने एक कस्टम पोस्ट प्रकार बनाया है, इस प्रकार के कुछ पोस्ट बनाए हैं, और मैं एक चयन तत्व के साथ एक फॉर्म को गूंजना चाहता हूं जो किसी उपयोगकर्ता को दान करने के लिए खिताब (वे परियोजनाओं का प्रतिनिधित्व करते हैं) में से एक का चयन करने की अनुमति देता है।
पीटर टर्नर

जवाबों:


11

किसी विशिष्ट पोस्ट प्रकार के सभी पोस्ट शीर्षक को क्वेरी करें

// Function that returns post titles from specific post type as form select element
// returns null if found no results.

function output_projects_list() {
    global $wpdb;

    $custom_post_type = 'page'; // define your custom post type slug here

    // A sql query to return all post titles
    $results = $wpdb->get_results( $wpdb->prepare( "SELECT ID, post_title FROM {$wpdb->posts} WHERE post_type = %s and post_status = 'publish'", $custom_post_type ), ARRAY_A );

    // Return null if we found no results
    if ( ! $results )
        return;

    // HTML for our select printing post titles as loop
    $output = '<select name="project" id="project">';

    foreach( $results as $index => $post ) {
        $output .= '<option value="' . $post['ID'] . '">' . $post['post_title'] . '</option>';
    }

    $output .= '</select>'; // end of select element

    // get the html
    return $output;
}

// Then in your project just call the function
// Where you want the select form to appear
echo output_projects_list();

3
यह किसी चीज के लिए एक अत्यधिक जटिल कार्य है जिसे WP_Query वर्ग में वर्डप्रेस द्वारा प्रदान की जाने वाली एपीआई का उपयोग करके आसानी से किया जा सकता है। @Ialocin द्वारा प्रदान किया गया उत्तर कहीं बेहतर है। इसके लिए आपको $ wpdb की जरूरत नहीं होगी।
somebodysomewhere

हाँ और टिप्पणी की क्या बात है? :)
अहमद फौद

1
@ ब्रायन far betterअन्य उत्तर के बारे में क्या है ? यह तकनीकी रूप से तेज़ है क्योंकि आप केवल उस डेटा को हथिया रहे हैं जो आपको mysql से चाहिए। अन्य उत्तर (आसान उत्तर) सभी डेटा को स्मृति में पकड़ लेता है और फिर इसे PHP में बाद में संशोधित करता है। PHP के लिए अधिक काम करता है। दोनों स्वीकार्य हैं लेकिन प्रत्येक के पास अपनी ताकत है। यदि आप mysql को जानते हैं तो यह बिल्कुल जटिल नहीं है। यह बहुत आसान है।
जोमोइ

मैं @ JoeMoe1984 से सहमत हूं, यह फ़ंक्शन अन्य उत्तर की तरह सरल नहीं है ... लेकिन यह एक स्मृति परिप्रेक्ष्य से अधिक कुशल है। SQL एक FAR बेहतर जगह है (wp_list_pluck (...) से) बहुमूल्य जानकारी को कम करने / निकालने के लिए। हां, यह थोड़ा अधिक जटिल है, लेकिन आपका सिस्टम इसके लिए आपको धन्यवाद देगा ...
mawalker

13

आप - और मेरे मन में, डेटा प्राप्त करने के लिए एपीआई कार्यों का उपयोग करना चाहिए।

// query for your post type
$post_type_query  = new WP_Query(  
    array (  
        'post_type'      => 'your-post-type',  
        'posts_per_page' => -1  
    )  
);   
// we need the array of posts
$posts_array      = $post_type_query->posts;   
// create a list with needed information
// the key equals the ID, the value is the post_title
$post_title_array = wp_list_pluck( $posts_array, 'post_title', 'ID' );

2
के लिए +1 wp_list_pluck()। मैं हमेशा उस एक के बारे में भूल जाता हूं ...
FaCE

मुझे प्लाक से परिचित कराने के लिए +1! मैंने इसे पहले कैसे नहीं देखा था ??
चेजल

5

एक पदानुक्रमित पद प्रकार के लिए, हमारे पास अंतर्निहित है:

wp_dropdown_pages( 
    [ 
        'post_type' => 'page',
        'echo'      => 1, 
        'name'      => 'wpse_titles', 
        'id'        => 'wpse-titles' 
    ] 
);

विकल्प मान के रूप में पोस्ट शीर्षक और पोस्ट आईडी के साथ एक चयन तत्व उत्पन्न करेगा ।

उदाहरण:

<select name='wpse_titles' id='wpse-titles'>
    <option class="level-0" value="1">AAA</option>
    <option class="level-0" value="2">BBB</option>
    <option class="level-1" value="3">&nbsp;&nbsp;&nbsp;CCC</option>
</select>

यह प्रलेखन के लिए स्पष्ट नहीं है wp_dropdown_pages(), लेकिन यह get_pages()इनपुट तर्कों के लिए एक आवरण है और इसका समर्थन भी करता है।


0

जिस तरह से मैंने हमेशा इस तरह की चीजों का उपयोग किया है get_postsऔर foreachनीचे कुछ पसंद कर रहा हूं :

// Create our arguments for getting our post
$args = [
  'post_type'=>'custom-slug'
];

// we get an array of posts objects
$posts = get_posts($args);

// start our string
$str = '<select>';
// then we create an option for each post
foreach($posts as $key=>$post){
  $str .= '<option>'.$post->post_title.'</option>';
}
$str .= '</select>';
echo $str;

यह अच्छी तरह से काम कर रहा है, धन्यवाद। मैं वर्तमान में सहेजे गए विकल्प में 'चयनित' जोड़ने का प्रयास कर रहा हूं, मैंने कोड के विभिन्न बिट्स की कोशिश की है और अंत में यह आया है, जो मुझे विकल्प को अपडेट करने की अनुमति दे रहा है, लेकिन 'चयनित' को जोड़ा नहीं जा रहा है सही करने के लिए। मैं गलत क्या कर रहा हूँ पर कोई संकेत? `$ str। = '<विकल्प'। ($ पोस्ट == $ मूल्य 2? 'चयनित = चयनित': '')। '>'। $ post-> post_title। '</ option>'; `किसी भी सुझाव के लिए बहुत धन्यवाद ps माफ करना, मुझे सही ढंग से कोड जोड़ने की जरूरत नहीं है, backticks की कोशिश की
Jo_pinkish
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.