मैं जानना चाहता हूं कि क्या किसी विशिष्ट टेम्पलेट के साथ पृष्ठ की आईडी प्राप्त करना संभव है। क्या यह उस पृष्ठ की आईडी प्राप्त करना संभव है जो "पृष्ठ-विशेष. एफपी" को सौंपा गया है?
मैं जानना चाहता हूं कि क्या किसी विशिष्ट टेम्पलेट के साथ पृष्ठ की आईडी प्राप्त करना संभव है। क्या यह उस पृष्ठ की आईडी प्राप्त करना संभव है जो "पृष्ठ-विशेष. एफपी" को सौंपा गया है?
जवाबों:
जब कोई पृष्ठ बनाया जाता है, तो उस पृष्ठ को दिए गए टेम्पलेट को कस्टम पोस्ट मेटा के रूप में उसी तरह सहेजा जाता है जैसे कस्टम फ़ील्ड में। 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 />';
}
यदि किसी को सिर्फ पेज आईडी की जरूरत है, तो आप उसका उपयोग करते हैं get_posts
और फिर बस 'आईडी फ़ील्ड्स ' मान के page
रूप में पास होते हैं। यह बहुत तेज़, बहुत अधिक अनुकूलित क्वेरी सुनिश्चित करेगा क्योंकि हम केवल db में पोस्ट आईडी कॉलम वापस करेंगे और उन सभी को दिए गए पृष्ठों पर नहींpost_type
as
( 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>';
set_transient
( codex.wordpress.org/Transients_API ) का भी उपयोग कर सकते हैं ।
यदि आपका पेज टेम्प्लेट उप-फ़ोल्डर, थीम-फोल्डर / पेज-टेम्प्लेट / पेज-टेम्प्लेट के अंदर रहता है। तो आप नीचे दिए गए क्वेरी से काम करेंगे:
$page_details = get_pages( array(
'post_type' => 'page',
'meta_key' => '_wp_page_template',
'hierarchical' => 0,
'meta_value' => 'page-templates/page-template.php'
));
यह उपरोक्त कोड उप-पृष्ठों को भी प्रदर्शित करता है।
धन्यवाद
निम्नलिखित एक और अधिक स्पष्ट स्क्रिप्ट है जो कि एक भाषा को ध्यान में रखते हैं, यदि आवश्यक हो। ध्यान दें कि यह 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
यहां एक पूर्ण फ़ंक्शन है जो 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'];
}
}