বন্ধুত্বপূর্ণ পারমালিঙ্ক দিয়ে কীভাবে একটি ফ্রন্ট এন্ড ব্যবহারকারী প্রোফাইল তৈরি করবেন


23

আমি এই ফর্ম্যাটের মতো বন্ধুত্বপূর্ণ url সহ একটি সর্বজনীন ফ্রন্ট-এন্ড প্রোফাইল পৃষ্ঠা তৈরি করতে চাই।

mysite.com/user/someusername

আমি কীভাবে এটি অর্জন করতে পারি তার কোনও ধারণা? আমি জানি এটি পুনর্লিখনের নিয়মের সাথে কিছু করার আছে তবে আমি কীভাবে এটি করতে পারি সে সম্পর্কে আমার কোনও ধারণা নেই। আপনি যদি আমার জন্য কোনও লিঙ্ক বা টিউটোরিয়াল পেয়ে থাকেন তবে তা দুর্দান্ত।

ধন্যবাদ!

উত্তর:


15

এটি করার দুটি উপায় রয়েছে:

  1. কাস্টম পুনর্লিখনের নিয়ম সহ লেখক পৃষ্ঠা
  2. একটি কাস্টম টেম্পলেট ফাইলগুলি পুনর্লিখনের নিয়মের সাথে যুক্ত

প্রথমটি প্রয়োগ করা আরও সহজ, তবে সমস্ত পরিস্থিতিতে কাজ নাও করতে পারে (যার মধ্যে একটিটি আমি শীঘ্রই বর্ণনা করব)।

কাস্টম পুনর্লিখন বিধি

আমি এই সমাধানটি কয়েক দিন আগে এখানে পেয়েছি: ইউআরএল পুনরায় লেখা

এবং মন্তব্য সহ কোড এখানে:

// Define the author levels you want to use
$custom_author_levels = array( 'user', 'leader' );

// On init, add a new author_level rewrite tag and add it to the author_base property of wp_rewrite
add_action( 'init', 'wpleet_init' );
function wpleet_init()
{
    global $wp_rewrite;
    $author_levels = $GLOBALS['custom_author_levels'];

    // Define the tag and use it in the rewrite rule
    add_rewrite_tag( '%author_level%', '(' . implode( '|', $author_levels ) . ')' );
    $wp_rewrite->author_base = '%author_level%';

}

// The previous function creates extra author_name rewrite rules that are unnecessary.  
//This function tests for and removes them

add_filter( 'author_rewrite_rules', 'wpleet_author_rewrite_rules' );
function wpleet_author_rewrite_rules( $author_rewrite_rules )
{
    foreach ( $author_rewrite_rules as $pattern => $substitution ) {
        if ( FALSE === strpos( $substitution, 'author_name' ) ) {
            unset( $author_rewrite_rules[$pattern] );
        }
    }
    return $author_rewrite_rules;
}

তারপরে আপনি বিল্ট ইন লেখক.এফপি টেম্পলেটটি ব্যবহার করতে পারেন, আপনার হৃদয়ের সামগ্রীতে পরিবর্তন করতে পারেন।

বিনীতভাবে, উপরে তালিকাভুক্ত লিঙ্কটি চেক করুন, কারণ জন ফ্যাব্রি সমস্ত কিছু ব্যাখ্যা করার জন্য একটি দুর্দান্ত কাজ করেছেন।

প্রশ্ন এবং যুদ্ধ পৃষ্ঠা পৃষ্ঠা

এই সমাধানগুলি আবিষ্কার করার সময় আমি যে থিমটিতে কাজ করছিলাম তার জন্য, আমার ব্যবহারকারীর মেটা মান (একটি পৃথক আইডি) এর উপর ভিত্তি করে একটি কাস্টম পৃষ্ঠা পরিবেশন করা দরকার। আমার ক্লায়েন্টটি ব্যবহারকারীর নাম বা ব্যবহারকারীর আইডি সর্বজনীনভাবে দৃশ্যমান হতে চায়নি, তাই আমরা একটি পৃথক স্তর তৈরি করেছি।

সমস্যাটি? এই মুহুর্তে, মেটা কী / মানগুলির দ্বারা ক্যোয়ারী করার জন্য পুনর্লিখনের এপিআই কীভাবে ব্যবহার করতে হবে তার কোনও সুস্পষ্ট উপায় নেই। ভাগ্যক্রমে, একটি সমাধান ছিল।

আপনার ফাংশন.এফপি ফাইলটিতে ...

// Create the query var so that WP catches your custom /user/username url
add_filter( 'query_vars', 'wpleet_rewrite_add_var' );
function wpleet_rewrite_add_var( $vars )
{
    $vars[] = 'user';
    return $vars;
}

এবং তারপরে, আপনাকে একটি নতুন পুনর্লিখনের ট্যাগ তৈরি করতে হবে এবং নিয়ম করতে হবে যাতে নতুন ক্যোয়ারী ভার কখন এবং কীভাবে পরিচালনা করতে হয় তা তা জানে।

add_rewrite_tag( '%user%', '([^&]+)' );
add_rewrite_rule(
    '^user/([^/]*)/?',
    'index.php?user=$matches[1]',
    'top'
);

একবার আপনি এটি সম্পন্ন করার পরে, যখন কোয়েরি ভারটি দেওয়া হচ্ছে তখন আপনাকে কেবল "ধরা" দরকার এবং তারপরে আপনার পছন্দের টেমপ্লেটে পুনর্নির্দেশ করতে হবে:

add_action( 'template_redirect', 'wpleet_rewrite_catch' );
function wpleet_rewrite_catch()
{
    global $wp_query;

    if ( array_key_exists( 'user', $wp_query->query_vars ) ) {
        include (TEMPLATEPATH . '/user-profile.php');
        exit;
    }
}

আপনি ব্যবহারকারী-প্রোফাইল.php তৈরি করেছেন তা নিশ্চিত করুন।

আমার নিজস্ব উদাহরণে, আমি একটি তৃতীয় ফাংশন তৈরি করেছি যা "পাবলিক ইউজার আইডি" এর সাথে মিলিয়ে user wpdb-> ইউজারমেটা টেবিলের মাধ্যমে প্রকৃত ইউজার_আইডির সাথে মেলে এবং তথ্যটি টেমপ্লেটে পাস করে।

আপনার যদি আপনার থিমের বাকী অংশ থেকে আলাদা কোনও টেম্পলেট তৈরি করতে হয় তবে মনে রাখবেন যে get_header সহ আপনি একটি নাম নির্দিষ্ট করতে পারেন:

get_header( 'user' );

যা হেডার-User.php ফাইল কল করবে।

উপসংহার

এই দুটিই কার্যকর, কার্যক্ষম সমাধান। দ্বিতীয়টি "সুরক্ষা" এর পৃথক স্তর সরবরাহ করে কারণ এটি ব্যবহারকারীর আইডি বা ব্যবহারকারীর নাম প্রকাশ করে না, যদি অন্য লোকেরা প্রোফাইলগুলি ব্রাউজ করতে সক্ষম হয়।

আশা করি এটি সহায়তা করে, আপনার কোনও প্রশ্ন থাকলে আমাকে জানান know


আমি আসলে ক্যুরি_ওয়ার পদ্ধতিটি ব্যবহার করে এটি সমাধান করেছি। ধন্যবাদ!
টিল্টডাউন

1
@bbloggers আমি জানি এই পোস্টটি কিছুটা পুরানো, তবে আপনি যদি ইউআরএল-এর ব্যবহারকারীর নামটি টেমপ্লেটে পাস করার জন্য তৃতীয় ফাংশনটি ভাগ করে নিতে পারেন তবে আগ্রহী ছিলেন?
প্যাট

@ প্যাট নিশ্চিত নন যে এই মুহুর্তে আমার সমস্ত কোডে আসল ফাংশনটি কোথায় রয়েছে (যেমন আপনি বলেছিলেন যে এটি কিছুক্ষণ আগে হয়েছিল) তবে ফর্ম্যাটটি wpleet_rewrite_catch () ফাংশনটি খুব কাছ থেকে অনুসরণ করবে। অ্যারে_কি_এক্সিস্টগুলির পরিবর্তে ('ব্যবহারকারী'), আমি সর্বজনীন ব্যবহারকারী আইডির জন্য পরীক্ষা করছিলাম এবং তারপরে কোন পাবলিক আইডি যুক্ত ছিল তা দেখার জন্য ডাব্লুপি_উসারমেটা টেবিলে একটি অনুসন্ধান করছিলাম। আশা করি কোডটি উপলভ্য না হলেও, অ্যালগরিদম সহায়তা করবে।
bybloggers

2

আমি আজকের প্রথম দিকে এটি পেয়েছি এবং ডিফেরেন্সের সাথে @byblogger কোডে কিছু সংশোধন করেছি যে টেম্পলেট_আরডাইরেক্ট ব্যবহার না করে আমি একটি স্থির পৃষ্ঠা প্রদর্শন করার অনুরোধটি পরিবর্তন করেছি, এর অর্থ হল আপনি এখন কোনও পৃষ্ঠার টেমপ্লেটে আপনার পছন্দসই কিছু যুক্ত করতে পারেন এবং এটিতে এটি ব্যবহার করতে পারেন পাতা।

class ProfilePage {
function __construct() {
    add_filter( 'init',array($this,'rw_init'));
    add_filter( 'query_vars', array($this,'wpleet_rewrite_add_var') );
    add_filter( 'request', array($this,'change_requests'));
}
function wpleet_rewrite_add_var( $vars ) {
    $vars[] = 'usuario';
    return $vars;
}
function rw_init(){
    add_rewrite_tag( '%usuario%', '([^&]+)' );
    add_rewrite_rule(
        '^usuario/([^/]*)/?',
        'index.php?usuario=$matches[1]',
        'top'
    );
}
function change_requests($query_vars) {
    //go to a specific page when the usuario key is set
    $query_vars['page_id'] = isset($query_vars['usuario']) ? 7581 : $query_vars['page_id'];
    return $query_vars;
}
}
new ProfilePage();

স্প্যানিশ -> ইউসরো = ব্যবহারকারী <- ইংরেজি


খুব সুন্দর! ভাগ করে নেওয়ার জন্য ধন্যবাদ। আমি আরও গতিশীল করতে চাই এবং আপনি আইডিটি স্যুইচ করতে পারেন get_page_by_path('page-slug')->ID। ব্যবহারটিও ভুলে যাবেন না flush_rewrite_rules, তাই আমি add_action( 'after_switch_theme', 'flush_rewrite_rules' );
এগুলি

1

এটি আমার বব্লগারদের উত্তরের উপর ভিত্তি করে আমার কোডিং কোড (ধন্যবাদ ধন্যবাদ) আমি কেবল শিখলাম যে আমরা টেম্পলেট_ড্রাইরেট হুক ব্যবহার করা উচিত নয় এবং তারপরে পিএইচপি বন্ধ করা উচিত, কারণ কিছু জিনিস কাজ করা বন্ধ করে দিতে পারে কারণ পিএইচপি এক্সিকিউটিং কোডের আকস্মিক বাধা।

ব্যাখ্যাটি এখানে: https://markjaquith.wordpress.com/2014/02/19/template_redirect-is-not-for-loading-templates/

সুতরাং, আমাদের টেমপ্লেট_যুক্ত হুক ব্যবহার করা উচিত। এই হুকের সাহায্যে পুনঃনির্দেশ এবং প্রস্থান পদ্ধতি ব্যবহার করার দরকার নেই।

এবং অন্যান্য পার্থক্যটি হ'ল আমার / ইউজারআইডি ছাড়াই কেবল www.server.com/myaccount দরকার ছিল।

এই কোড:

add_filter( 'query_vars', 'wp58683_userprofile_var' );
function wp58683_userprofile_var( $vars )
{
    $vars[] = 'myprofile';
    return $vars;
}

add_rewrite_tag( '%myprofile%', '([^&]+)' );

add_rewrite_rule(
    '^myprofile/?',
    'index.php?myprofile',
    'top'
);

add_action( 'template_include', 'wp58683_userprofile_page' );
function wp58683_userprofile_page($original_template)
{
    global $wp_query;

    if ( array_key_exists( 'myprofile', $wp_query->query_vars ) ) {
        if (is_user_logged_in() ){ 
            return TEMPLATEPATH . '/user-profile.php';
        }
    }
    else {
        return $original_template;
    }

}

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.