কাস্টম পোস্ট_ টাইপের সংরক্ষণাগার URL পান


26

এটা বোকা প্রশ্ন মত মনে হচ্ছে। তবে, আমি এটি বুঝতে পারি না :(।

আমাকে বাড়িতে বাটন প্রদর্শন করতে হবে যা কাস্টম পোস্ট_ টাইপের আর্কাইভ ইউআরএল (সংরক্ষণাগার- {post_type}। Php) এ যায়। আমি কেমন করে ঐটি করি?


কোন ধরনের বাটন, একটি এনএভি মেনুতে যুক্ত করুন, বা কেবল জেনেরিক লিঙ্ক? সংরক্ষণাগার ইউআরএলটি সাধারণত yoursite.com/type-slugআপনি যদি অন্য কোনও কিছুতে স্পষ্ট করে সেট না করেন তবে যেমন। yoursite.com/some-other-url..
t31os

@ t31os: হ্যাঁ, এখনই, আমি এটির মতো হার্ডকোড করেছি। তবে, খুব শীঘ্রই এটি @ মাইকের কোড ব্যবহার করে এটি পরিবর্তন করবে।
আরিফবায়ু

উত্তর:


25

হাই @ সাইলেন্ট:

দেখা যাচ্ছে ওয়ার্ডপ্রেস ৩.১ এ একটি ফাংশন রয়েছে যা আপনার যা ইচ্ছা ঠিক তা করে এবং এর নামকরণ করা হয় get_post_type_archive_link(); আপনি কীভাবে এটি কল করবেন ( এখানে একটি কাস্টম পোস্টের ধরণ ধরে নেওয়া 'product'):

<a href="<?php echo get_post_type_archive_link('product'); ?>">Products</a>

নীচে আমার পূর্ববর্তী উত্তরটি আমি আবিষ্কার করেছি যে ওয়ার্ডপ্রেসটির সত্যই এই ব্যবহারের ক্ষেত্রে বিল্ট-ইন রয়েছে function

পূর্ব উত্তর:

ওয়ার্ডপ্রেস ৩.১ এর মূল উত্স কোডে আমি যদি কিছু উপেক্ষা না করি তবে আমি মনে করি আপনি এমন কোনও ফাংশন সন্ধান করছেন get_archive_link()যা আপনি এর মতো কল করতে পারেন (নাম ধরে নেওয়া কোনও কাস্টম পোস্টের ধরণ ধরে 'product'):

<a href="<?php echo get_archive_link('product'); ?>">Products</a>

এবং আপনার উত্স কোডটি যা আপনি আপনার থিমের function.phpফাইল বা .phpএকটি প্লাগইন যা আপনি লিখতে পারেন তার জন্য একটি ফাইলে রাখতে পারেন:

if (!function_exists('get_archive_link')) {
  function get_archive_link( $post_type ) {
    global $wp_post_types;
    $archive_link = false;
    if (isset($wp_post_types[$post_type])) {
      $wp_post_type = $wp_post_types[$post_type];
      if ($wp_post_type->publicly_queryable)
        if ($wp_post_type->has_archive && $wp_post_type->has_archive!==true)
          $slug = $wp_post_type->has_archive;
        else if (isset($wp_post_type->rewrite['slug']))
          $slug = $wp_post_type->rewrite['slug'];
        else
          $slug = $post_type;
      $archive_link = get_option( 'siteurl' ) . "/{$slug}/";
    }
    return apply_filters( 'archive_link', $archive_link, $post_type );
  }
}

উইকএন্ডে আমি আসলে এই সঠিক যুক্তি নিয়ে কাজ করছিলাম যদিও আমি এখনও 100% নিশ্চিত নই যে ওয়ার্ডপ্রেস দেখতে পাবে যে এটি সম্ভবত কোনও নির্দিষ্ট সাইটের জন্য কার্যকর হবে যদিও সমস্ত ব্যবহারের ক্ষেত্রে লজিকের ক্রমটি সাধারণভাবে সঠিক।

ট্র্যাকের মাধ্যমে ওয়ার্ডপ্রেসে যুক্ত করার পরামর্শ দেওয়াও এটি দুর্দান্ত কাজ, যা আমি মনে করি এই সন্ধ্যায় পরে করব।


বিটিডব্লিউ, আপনি ট্র্যাকটি জমা দেওয়ার পরে, দয়া করে এখানে লিঙ্ক করতে পারেন।
আরিফবায়ু

নিঃশব্দ - হ্যাঁ, অবশ্যই
মাইকচিন্কেল

@ মাইক - আপনি না থাকলে আমিও তেমন কিছু লিখে ফেলতাম ....;) আমি ভাবছিলাম @ সাইলেন্টের মনে এটি ছিল কিনা তবে একটি বোতামের উল্লেখ আমাকে অন্য কিছু
ভেবেছিল

@ t31os - আমি এই ইউআরএল রাউটিং প্লাগইনটির জন্য এই সপ্তাহান্তে একই যুক্তিতে কাজ করছিলাম, তাই আমার একটি সূচনা হয়েছিল। :) বোতাম হিসাবে, আপনি যে ঠিকানা একটি উত্তর যোগ করতে পারেন?
মাইকস্কিঙ্কেল 0

আমি সত্যিই নিশ্চিত নই যে কভার করার মতো কিছু আছে, আমার মনে হয় আপনার উপরের ফাংশনটি যা জিজ্ঞাসা করেছিল তা কভার করেছে ... :)
t31os

12

আপনি যখন পোস্টের রেজিস্ট্রেশন করেন আপনি "has_archive" প্যারামিটার সহ স্লাগ হিসাবে একটি স্ট্রিং পাস করতে পারেন এবং নিশ্চিত করতে পারেন যে আপনি আবার সত্য বা একটি অ্যারেতেও পুনর্লিখন সেট করেছেন তবে মিথ্যা নয় এবং তারপরে আপনার সিপিটি সংরক্ষণাগার URL হবে http://www.YOURDOMAIN.com উদাহরণস্বরূপ / has_archive_slug

যদি আপনি আপনার রেজিস্টার_পস্ট_ টাইপ উদাহরণস্বরূপ সেট করেন:

$args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true, 
    'show_in_menu' => true, 
    'query_var' => true,
    'rewrite' => 'product',
    'capability_type' => 'post',
    'has_archive' => 'products', 
    'hierarchical' => false,
    'menu_position' => null,
    'supports' => array('title','editor','author','thumbnail','excerpt','comments')
  ); 
 register_post_type('product',$args);

তারপরে আপনার একক url হ'ল: http://www.YOURDOMAIN.com/product/postName এবং আপনার সংরক্ষণাগার ইউআরএল: http://www.YOURDOMAIN.com/products/


3
হুররে. আমি সবসময়ই has_archiveবুলিয়ান ভাবতাম , তবে এখন আমি জানি এটি একটি স্ট্রিং দেওয়া যেতে পারে, তাই আমার একক কাস্টম পোস্ট ধরণের recipeবহুবচন থাকতে পারে/recipes/
অ্যাস্ট্রোটিম

আমি কখনই স্মরণ করতে পারি না যে / তারা কখন স্যুইচ করেছে বা এটি সর্বদা ত্রুটিযুক্ত ছিল তবে 2017 সালে 'rewrite'কেবলমাত্র বুলিয়ান বা অ্যারের মান গ্রহণ করে। 'rewrite' => 'product',আপনি তালিকাবদ্ধ করেছেন তার চেয়ে এটি পরিবর্তে হওয়া উচিত 'rewrite' => array( 'slug' => 'product' ),
মাইক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.