टेम्पलेट द्वारा पेज आईडी प्राप्त करें


19

मैं जानना चाहता हूं कि क्या किसी विशिष्ट टेम्पलेट के साथ पृष्ठ की आईडी प्राप्त करना संभव है। क्या यह उस पृष्ठ की आईडी प्राप्त करना संभव है जो "पृष्ठ-विशेष. एफपी" को सौंपा गया है?

जवाबों:


39

जब कोई पृष्ठ बनाया जाता है, तो उस पृष्ठ को दिए गए टेम्पलेट को कस्टम पोस्ट मेटा के रूप में उसी तरह सहेजा जाता है जैसे कस्टम फ़ील्ड में। meta_keyहै _wp_page_templateऔर meta_valueपृष्ठ टेम्पलेट हो जाएगा

आप बस उन get_pagesसभी पृष्ठों को पुनः प्राप्त करने के लिए उपयोग कर सकते हैं जिनमें meta_valueनिर्दिष्ट टेम्पलेट है

$pages = get_pages(array(
    'meta_key' => '_wp_page_template',
    'meta_value' => 'page-special.php'
));
foreach($pages as $page){
    echo $page->ID.'<br />';
}

EDIT 23-07-2015

यदि किसी को सिर्फ पेज आईडी की जरूरत है, तो आप उसका उपयोग करते हैं get_postsऔर फिर बस 'आईडी फ़ील्ड्स ' मान के pageरूप में पास होते हैं। यह बहुत तेज़, बहुत अधिक अनुकूलित क्वेरी सुनिश्चित करेगा क्योंकि हम केवल db में पोस्ट आईडी कॉलम वापस करेंगे और उन सभी को दिए गए पृष्ठों पर नहींpost_typeas

( PHP 5.4+ की आवश्यकता है )

$args = [
    'post_type' => 'page',
    'fields' => 'ids',
    'nopaging' => true,
    'meta_key' => '_wp_page_template',
    'meta_value' => 'page-special.php'
];
$pages = get_posts( $args );
foreach ( $pages as $page ) 
    echo $page . '</br>';

धन्यवाद। थोड़ा बहुत "भारी" नहीं है? (सभी पृष्ठों के माध्यम से चल रहा है)
user3800799

आपके पास कितने पृष्ठ हैं, इस पर निर्भर करता है। वास्तव में कोई तेज देशी तरीका नहीं है जो मुझे इस डेटा को पुनः प्राप्त करने का पता है। यदि आपके पास बहुत सारे पृष्ठ हैं, तो मेरा सुझाव है कि आप उस डेटा को संग्रहीत करने के लिए ट्रांज़ेक्टर का उपयोग करें और एक नया पृष्ठ प्रकाशित होने पर क्षणिक को हटा दें / हटा दें
पीटर गोएंस

मेरी खुशी, खुशी है कि मैं मदद कर सकता था। आनंद लें :-)
Pieter

@ user3800799 मैंने पोस्ट अपडेट किया है यदि आप केवल आईडी प्राप्त करने में रुचि रखते हैं, तो और कुछ नहीं
पीटर गोयन

यदि आप डेटाबेस को बहुत अधिक क्वेरी नहीं करना चाहते हैं, तो आप set_transient( codex.wordpress.org/Transients_API ) का भी उपयोग कर सकते हैं ।
क्रिस एंडरसन

2

यदि आपका पेज टेम्प्लेट उप-फ़ोल्डर, थीम-फोल्डर / पेज-टेम्प्लेट / पेज-टेम्प्लेट के अंदर रहता है। तो आप नीचे दिए गए क्वेरी से काम करेंगे:

$page_details = get_pages( array(
 'post_type' => 'page',
 'meta_key' => '_wp_page_template',
 'hierarchical' => 0,
 'meta_value' => 'page-templates/page-template.php'
));

यह उपरोक्त कोड उप-पृष्ठों को भी प्रदर्शित करता है।

धन्यवाद


0

निम्नलिखित एक और अधिक स्पष्ट स्क्रिप्ट है जो कि एक भाषा को ध्यान में रखते हैं, यदि आवश्यक हो। ध्यान दें कि यह WPML नहीं, पॉलीलैंग के उपयोग को मानता है।

function get_post_id_by_template($template,$lang_slug = null){
  global $wpdb;
  $wh = ($lang_slug) ? " AND t.slug = %s" : "";

  $query = $wpdb->prepare(
    "SELECT DISTINCT p.ID
    FROM $wpdb->posts p
    INNER JOIN $wpdb->postmeta meta ON meta.post_id = p.ID
    INNER JOIN $wpdb->term_relationships tr ON meta.post_id = tr.object_id
    INNER JOIN $wpdb->term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
    INNER JOIN $wpdb->terms t ON tt.term_id = t.term_id
    WHERE p.post_status = 'publish' AND meta.meta_key = %s AND meta.meta_value = %s" . $wh,
    '_wp_page_template',
    $template,
    $lang_slug
  );

  $ids = $wpdb->get_results($query);

  if($ids && isset($ids[0])){
    $p = $ids[0];
    return $p->ID;
  } else {
    return false;
  }
}// get_post_id_by_template

0

यहां एक पूर्ण फ़ंक्शन है जो WPML और पॉलीलैंग के साथ काम करता है। Https://github.com/cyrale/ का श्रेय

/**
* Search for a page with a particular template.
*
* @param string $template Template filename.
* @param array  $args     (Optional) See also get_posts() for example parameter usage.
* @param bool   $single   (Optional) Whether to return a single value.
*
* @return Will be an array of WP_Post if $single is false. Will be a WP_Post object if the page is find, FALSE otherwise
*/
if (!function_exists('get_page_by_template')) {
    function get_page_by_template($template, $args = array(), $single = true) {
        $pages_by_template = wp_cache_get('pages_by_template', 'cyrale');
        if (empty($pages_by_template) || !is_array($pages_by_template)) {
            $pages_by_template = array();
        }
        if (!isset($pages_by_template[$template])) {
            $args = wp_parse_args(array(
                'posts_per_page' => -1,
                'post_type'      => 'page',
                'suppress_filters'  => 0,
                'meta_query'     => array(
                    array(
                        'key'   => '_wp_page_template',
                        'value' => $template,
                    ),
                ),
            ), $args);
            $pages = get_posts($args);
            $pages_by_template[$template]= array(
                'single' => !empty($pages) && is_array($pages) ? reset($pages) : false,
                'pages'  => $pages,
            );
        }
        wp_cache_set('pages_by_template', $pages_by_template, 'cyrale');
        return $pages_by_template[$template][$single ? 'single' : 'pages'];
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.