কোনও পৃষ্ঠা তৈরি না করে নির্দিষ্ট url এর জন্য একটি টেম্পলেট ফাইল ব্যবহার করুন


14

আমি অবাক হই যে that টেমপ্লেটের জন্য কোনও পৃষ্ঠা তৈরি না করে নির্দিষ্ট URL এর জন্য কোনও টেম্পলেট ফাইল ব্যবহার করা সম্ভব কিনা।

এটি আমার সরলীকৃত সমস্যা:

আমি ডাব্লুপি-তে একটি লিঙ্ক সামগ্রী দিয়ে একটি পৃষ্ঠা তৈরি করেছি যা কিছু অনুচ্ছেদে ফর্ম ডেটা সহ একটি নির্দিষ্ট ইউআরএলকে নির্দেশ করে: (mysite.com/retail/?a=test&b=1234)

আমি চাই যে ইউআরএল (খুচরা) চাইল্ড থিম ডিরেক্টরিতে আমার টেম্পলেট ফাইল টেম্পলেট-খুচরা.পিএপি ব্যবহার করবে, "খুচরা" নামের একটি পৃষ্ঠা তৈরি না করে এবং সেখান থেকে টেমপ্লেট পৃষ্ঠাটি নির্বাচন করুন। টেমপ্লেট-খুচরা.এফপি ফাইলটিতে কেবল বাহ্যিক সামগ্রী রয়েছে, ওয়ার্ডপ্রেস থেকে নিজেই কিছুই নেই।

এটা কি সম্ভব?


1
আপনাকে এইচটিএ্যাক্সেসটি ফাইলে পুনর্নির্দেশ করতে হবে, তারপরে অনুরোধটি প্রক্রিয়া করুন।
হাওডি_এমসিজি

এই ক্ষেত্রে .htaccess ফাইলটিতে আমার অ্যাক্সেস নেই। অন্য কোন উপায আছে কি?
কিট

এমন প্লাগইন রয়েছে যা আপনাকে এই ধরণের জিনিসগুলি অ্যাক্সেস দিতে পারে, কোনওভাবেই আপনাকে সার্ভারে একটি কাস্টম ফাইল আপলোড করতে হবে যাতে এতে আঘাত হানার মতো কিছু থাকে।
হাওডি_এমসিজি

4
আপনার প্রকল্পের সমস্ত বিবরণ সম্পর্কে নিশ্চিত নন তবে প্রথমে যে বিষয়গুলি মনে আসে তা template_redirect
হ'ল

উত্তর:


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 মান সহ একটি স্ট্রিং: " উদাহরণ. com/retail "
কিট

var_dump($url_path);কোডটি কেমন দেখাচ্ছে এবং কীভাবে তা সামঞ্জস্য করার চেষ্টা করুন । এই মানটি আপনার আসল ইউআরএলের উপর নির্ভর করে । যেমন কাস্টম হোম ইউআরএল, বা সাবফোল্ডারে ইনস্টল করা ডাব্লুপি পৃথক হতে পারে। @ কিট
গাজাজাপ

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 প্যারামগুলি পুনরুদ্ধার করতে এটির সাথে একত্রিত হবেন। লিঙ্কগুলি এখানে:

কোড:

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/ '

আমার অবশ্যই বলতে হবে যে আমার নিজের পৃষ্ঠায় পোষ্ট বা জিইটি তৈরি করতে এবং কিছু সেশন ডেটা 'ডব্লিউসি () -> সেশন' সংরক্ষণ করার জন্য আমার কোনও ইউআরএল প্রয়োজন ছিল এবং এটি এবং এই সমস্যাগুলি সমাধান করে, কারণ আপনার কাস্টমটির মেরুদণ্ড থাকতে পারে পিএইচপি কোড সহ পুরো ওয়ার্ডপ্রেস, উইককমার্স ইত্যাদির সমস্ত 'আবশ্যক (' ডাব্লুপি-লোড ') ইত্যাদি' সহ , mysite.com/index.php/MYPAGE এর মাধ্যমে কাজ করতে হবে .....

আপনার কেবল দরকার:

প্রথম: নতুন পৃষ্ঠার টেমপ্লেট হিসাবে আপনার থিমের অবস্থানের ভিতরে একটি ফাইল তৈরি করুন যেমন 'ডাব্লুপি-কনটেন্ট / থিম / মাইথিম / কাস্টম্প্যাম্পলেট.পিপি' (মন্তব্য গুরুত্বপূর্ণ তাই ওয়ার্ডপ্রেস দ্বারা 'টেমপ্লেটের নাম' পর্যবেক্ষণ করা যেতে পারে):

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

দ্বিতীয়: ' ডাব্লুপি -অ্যাডমিন'> পৃষ্ঠাগুলির মাধ্যমে ওয়ার্ডপ্রেসে একটি পৃষ্ঠা তৈরি করুন (আসুন মাইপেজের মতো একটি নাম বলুন বা আপনি যা খুশি স্লাগ পরিবর্তন করতে পারেন) এবং অবশ্যই পূর্ববর্তী টেমপ্লেটটিকে এই পৃষ্ঠার টেম্পলেট হিসাবে সংযুক্ত করুন যা নাম টেম্পলেট বৈশিষ্ট্য বিভাগে ' যিনি নাম '

সুতরাং, আসুন নতুন পৃষ্ঠা 'mysite.com/index.php/MYPAGE' খুলুন এবং আপনি দেখতে পাবেন।

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

অতিরিক্ত: আসুন 'স্ক্রিপ্ট' এইচটিএমএল ট্যাগগুলির মধ্যে আপনি যা কল্পনা করতে পারেন তা কার্ট, চেকআউটে জাভাস্ক্রিপ্ট বা jquery ফাংশন তৈরি করুন এবং এর মতো কোড অন্তর্ভুক্ত করুন:

var data = { action : actionName, dataA : etcA, dataB : etcB}
$.ajax({
    type:     'post',
    url:      'index.php/MYPAGE',
    data:     data,
    success:  function( response ) {
    },
    complete: function() {
    }
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.