पृष्ठ बनाए बिना किसी विशिष्ट url के लिए टेम्प्लेट फ़ाइल का उपयोग करें


14

मुझे आश्चर्य है कि अगर किसी विशेष यूआरएल के लिए टेम्प्लेट फ़ाइल का उपयोग करना संभव है, तो उस टेम्प्लेट के लिए एक पेज बनाने के बिना।

यह मेरी सरलीकृत समस्या है:

मैंने कुछ लिंक सामग्री के साथ WP में एक पृष्ठ बनाया है जो कुछ अनुगामी प्रपत्र डेटा के साथ एक विशिष्ट यूआरएल को इंगित करता है: (mysite.com/retail/?a=test&b=1234)

मैं चाहता हूं कि url (खुदरा) स्वचालित रूप से मेरी टेम्पलेट फ़ाइल टेम्पलेट-Retail.php का उपयोग करें, जो कि मेरे पास चाइल्ड थीम डायरेक्टरी में है, बिना "रिटेल" नामक पेज बनाने के लिए और वहां से टेम्पलेट पेज का चयन करें। टेम्पलेट-रिटेल.फैप फ़ाइल में केवल बाहरी सामग्री है, वर्डप्रेस से कुछ भी नहीं।

क्या यह संभव है?


1
आपको फ़ाइल में एक HTAccess पुनर्निर्देशित बनाने की आवश्यकता होगी, फिर वहां अनुरोध को संसाधित करें।
Howdy_McGee

मेरे पास इस मामले में .htaccess फ़ाइल तक पहुंच नहीं है। क्या कोई और तरीका है?
कीट

ऐसे प्लगइन्स हैं जो आपको इस प्रकार की चीजें करने के लिए एक्सेस दे सकते हैं, किसी भी तरह आपको एक कस्टम फ़ाइल सर्वर पर अपलोड करने की आवश्यकता होगी ताकि इसमें कुछ हिट हो।
Howdy_McGee

4
अपनी परियोजना के सभी विवरणों के बारे में निश्चित नहीं है, लेकिन पहली चीजें जो दिमाग में आती हैं template_redirectया एक समापन बिंदु है
s_ha_dum

जवाबों:


16

आप बस url को देख सकते हैं, फ़ाइल लोड कर सकते हैं और बाहर निकल सकते हैं।

यह तब किया जा सकता है जब वर्डप्रेस ने अपने पर्यावरण को लोड किया, जैसे 'init'

add_action('init', function() {
  $url_path = trim(parse_url(add_query_arg(array()), PHP_URL_PATH), '/');
  if ( $url_path === 'retail' ) {
     // load the file if exists
     $load = locate_template('template-retail.php', true);
     if ($load) {
        exit(); // just exit if template was found and loaded
     }
  }
});

ध्यान दें कि स्लग "खुदरा" के साथ एक वास्तविक पृष्ठ का उपयोग कभी नहीं किया जा सकता है।

यह बहुत आसान है, लेकिन हार्डकोड भी है, इसलिए यदि आपको एक ही पृष्ठ के लिए इसकी आवश्यकता है तो यह ठीक है। यदि आपको अधिक यूआरएल को नियंत्रित करने की आवश्यकता है, तो इस उत्तर में प्रस्तावित समाधान पर एक नज़र डालें ।


आपके उत्तर के लिए धन्यवाद। मुझे काम करने के लिए उपरोक्त कोड नहीं मिल सकता है। यह कभी भी सच नहीं है: "अगर ($ url_path === 'खुदरा') {" $ url_path मूल्य के साथ एक स्ट्रिंग है: " example.com/retail "
Keat

कोशिश करें var_dump($url_path);और देखें कि यह कैसा दिखता है और कोड को समायोजित करें। वह मूल्य आपके वास्तविक url पर निर्भर करता है । कस्टम होम url के लिए, या सबफ़ोल्डर में स्थापित WP अलग हो सकता है। @Keat
gmazzap

1
उत्तर के लिए धन्यवाद, और देर से उत्तर के लिए खेद है। मैंने इस समाधान का उपयोग किया और यह सही काम करता है। $url_path = trim(parse_url(add_query_arg(array()), PHP_URL_PATH), '/'); $templatename = 'retail'; $pos = strpos($url_path, $templatename); if ($pos !== false) {
केट

5

initआप जो हासिल करने की कोशिश कर रहे हैं, उसके लिए यह कार्रवाई उचित नहीं है। आपको template_includeइसके बजाय फ़िल्टर का उपयोग करना चाहिए । आपको यह सुनिश्चित get_query_varकरने के लिए कि कौन सा टेम्प्लेट लोड करने की आवश्यकता है, यह जाँचने के लिए URL params को पुनः संयोजित करेंगे । यहाँ लिंक हैं:

कोड:

add_filter( 'template_include', 'portfolio_page_template', 99 );

function portfolio_page_template( $template ) {

    if ( is_page( 'portfolio' )  ) {
        $new_template = locate_template( array( 'portfolio-page-template.php' ) );
        if ( '' != $new_template ) {
            return $new_template ;
        }
    }

    return $template;
}

2

ऐसा करने के लिए वर्डप्रेस-वे साथ है page-templateshttps://developer.wordpress.org/themes/template-files-section/page-template-files/

आपको केवल वर्डप्रेस टेम्पलेट के लिए एक कोड की आवश्यकता है। अपने वर्डप्रेस थीम में आप एक पेज टेम्पलेट बना सकते हैं और उसका नाम बदल सकते हैं

page-id.php

वह विशेष पृष्ठ स्वचालित रूप से इसे उठाएगा और टेम्पलेट का उपयोग करेगा।

उदाहरण के लिए यदि आपके पृष्ठ में 5874 की आईडी है तो आप टेम्पलेट को नाम देंगे page-5784.php

आप पृष्ठ स्लग के आधार पर टेम्पलेट का नाम भी दे सकते हैं। उदाहरण के लिए यदि पेज स्लग है hello-worldतो टेम्प्लेट का नाम होगाpage-hello-world.php

इसे भी देखें: - https://developer.wordpress.org/files/2014/10/template-hierarchy.png


0

@ शिवानंद-शर्मा यह एकदम सही और साफ-सुथरा तरीका है ( https://developer.wordpress.org/themes/template-files-section/page-template-files/ ) किसी भी पेज को वर्डप्रेस की तरह बनाने के लिए, और यदि आप चाहें तो अपने पेज को छिपाने के लिए, मैं सिंपल और इफेक्टिव प्लगइन ' https://wordpress.org/plugins/exclude-pages/ ' का उपयोग करता हूं

मुझे यह कहना होगा कि मुझे अपने स्वयं के पृष्ठ पर POST या GET बनाने के लिए एक URL की आवश्यकता थी और कुछ सत्र डेटा 'WC () -> सत्र' को बचाने के लिए, और यह इस और अन्य समस्याओं को हल करता है, क्योंकि आपके पास कस्टम की रीढ़ हो सकती है संपूर्ण वर्डप्रेस, woocommerce आदि के माध्यम से mysite.com/index.php/MYPAGE के साथ काम करने के लिए सभी 'आवश्यकता (' wp-load ') आदि' सहित php कोड ....।

आपको बस इसकी आवश्यकता है:

पहला: नए पृष्ठ के टेम्प्लेट के रूप में अपने थीम स्थान के अंदर एक फ़ाइल बनाएं जैसे कुछ 'wp-content / themes / mytheme / customtemplate.php' (टिप्पणी महत्वपूर्ण है इसलिए 'टेम्पलेट नाम' Wordpress द्वारा देखा जा सकता है):

<?php /* Template Name: WhateverName */ 
echo 'Hello World';echo '</br>';
var_dump(WC()->session); 
var_dump($_POST);
var_dump($_GET);
?>

दूसरा: सामान्य रूप से के माध्यम से 'WP-व्यवस्थापक'> पन्ने वर्डप्रेस पर एक पृष्ठ बनाएं (जैसे एक नाम मान लीजिए myPage , या आप स्लग जो चाहो बदल सकते हैं) और ऑफ कोर्स इस पेज के टेम्पलेट के रूप में पिछले टेम्पलेट लिंक जो नाम है टेम्प्लेट अनुभाग पर 'जो भी नाम' हो

तो, चलो 'mysite.com/index.php/MYPAGE' नया पृष्ठ खोलें और आप देखेंगे।

Hello World
object(WC_Session_Handler)#880 .....................

एक्सट्रा: चलो कार्ट, चेकआउट में जावास्क्रिप्ट या jquery फ़ंक्शंस बनाएं, जो भी आप 'स्क्रिप्ट' HTML टैग्स के अंदर कल्पना कर सकते हैं, और इस तरह कोड शामिल करें:

var data = { action : actionName, dataA : etcA, dataB : etcB}
$.ajax({
    type:     'post',
    url:      'index.php/MYPAGE',
    data:     data,
    success:  function( response ) {
    },
    complete: function() {
    }
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.