मैं एक प्लगइन के भीतर से एक कस्टम पेज टेम्पलेट बनाने के तरीके के लिए पिछले कुछ घंटों के लिए चारों ओर देख रहा हूं, लेकिन अभी तक कोई भाग्य नहीं था।
मैं विशेष रूप से जो करने की कोशिश कर रहा हूं वह एक पृष्ठ को संपादित करते समय उपलब्ध पृष्ठ टेम्पलेट्स की सूची में एक विकल्प जोड़ने के लिए है, और किसी अन्य विधि का उपयोग नहीं करना जैसेif( is_page( 'page-slug' ) ) { /* etc */ }
क्या कोई वैश्विक चर है जिसे मैं इसे करने के लिए संशोधित कर सकता हूं?
संपादित करें:
मैं वर्तमान में इस कोड का उपयोग कर रहा हूं, लिंक @ m0r7if3r के आधार पर मुझे एक टिप्पणी में दिया गया है, समस्या यह है कि यह फ़ंक्शन पेज को देखते समय चलेगा, लेकिन पेज को संपादित करते समय नहीं (पेज टेम्प्लेट के साथ ड्रॉपडाउन सूची को पॉप्युलेट करने के लिए) :
class JW_SiteGrader {
private static $instance;
private function __construct() {
add_action( 'template_redirect', array( &$this, 'sitegrader_template_redirect' ), 20 );
}
public static function getInstance() {
// Return the class data in a Singleton fashion
if (self::$instance == null)
self::$instance = new JW_SiteGrader();
return self::$instance;
}
public function sitegrader_template_redirect() {
add_filter( 'page_template', array( &$this, 'sitegrader_page_template' ), 10, 1 );
}
public function locate_plugin_template( $template_names, $load = false, $require_once = true ) {
if ( !is_array( $template_names ) )
return '';
$located = '';
$this_plugin_dir = WP_PLUGIN_DIR . '/' . str_replace( basename( __FILE__ ), '', plugin_basename( __FILE__ ) );
foreach ( $template_names as $template_name ) {
if ( !$template_name )
continue;
if ( file_exists( STYLESHEETPATH . '/' . $template_name ) ) {
$located = STYLESHEETPATH . '/' . $template_name;
break;
} else if ( file_exists( TEMPLATEPATH . '/' . $template_name ) ) {
$located = TEMPLATEPATH . '/' . $template_name;
break;
} else if ( file_exists( $this_plugin_dir . $template_name ) ) {
$located = $this_plugin_dir . $template_name;
break;
}
}
if ( $load && '' != $located )
load_template( $located, $require_once );
return $located;
}
public function sitegrader_page_template( $template ) {
$object = get_queried_object();
if ( 'page' == $object->post_type ) {
// New
$templates[] = "page-sitegrader.php";
// Like in core
$templates[] = "page-{$object->post_type}.php";
$templates[] = "page.php";
return locate_template( $templates );
}
// return apply_filters('page_template', $template);
return $template;
}
}
2 संपादित करें:
ऐसा लगता है कि यह कार्यक्षमता भविष्य के अद्यतन में जारी की जाएगी, मैंने इस बारे में काफी कुछ टीआरसी टिकट पढ़े और कुछ चर्चा हुई लेकिन कोई वास्तविक उत्तर नहीं मिला (3.4 की उम्मीद है)। ट्रेक टिकट URL की सूची यहां थोड़ा सा दी जाएगी।
3 संपादित करें:
ऊपर दिया गया कोड काम करता है, लेकिन, इस मुद्दे पर मैं केवल एक ही मुद्दा है कि कोई भी टेम्पलेट ड्रॉपडाउन सूची में जोड़ा नहीं जा रहा है जब एक नया पृष्ठ संपादित / जोड़ रहा है। मैं कुछ चीजों की कोशिश कर रहा हूं और जल्द ही अपने सवाल को अपडेट करूंगा।
page_template
हुक का उपयोग कर रहा हूं , मेरे संपादन में ऊपर का कोड वह है जो वर्तमान में उपयोग किया जा रहा है। क्या मुझे template_redirect
हुक का उपयोग करने की आवश्यकता है और फिर page_template
फ़िल्टर को वहां जोड़ा जाएगा ?