গতকাল আমি যেভাবে পেয়েছিলাম প্রায় একই উত্তর, তবে আমি এতে সন্তুষ্ট নই। সুন্দরবায়ম্পের উত্তরের একটি ত্রুটি রয়েছে, যখন /% পোস্টনাম% / একাধিক পোস্ট ধরণের ক্ষেত্রে এক সাথে ব্যবহার করা হয় তখন তা কার্যকর হয় না।
এখানে আমার উত্তর, যা বর্তমান কাঠামোতেও সন্ধান করে এবং ফ্যালব্যাকে পোস্ট ধরণের অ্যারে তৈরি করে। যদিও এর মধ্যে একটি ত্রুটি রয়েছে, যদি দুটি পোস্ট ধরণের একই স্লাগ থাকে এবং উভয়ই /% পোস্টের নাম% / হয় তবে এটি উভয়ই দেখায়।
class MyCustomPostType {
/**
* Register post type
**/
public static function register_post_type() {
global $wp_rewrite;
$args = array(
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => false,
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => null,
'supports' => array('title','editor','thumbnail')
);
register_post_type('my_custom_post_type', $args);
// Enables the pages to work simultaneously
$wp_rewrite->use_verbose_page_rules = true;
add_filter("rewrite_rules_array", array(__CLASS__, 'rewrite_rules_array'));
add_action("parse_query", array(__CLASS__, 'parse_query'));
add_filter("post_type_link", array(__CLASS__, 'post_type_link'), 1, 4);
}
public static function post_type_link($link, $post, $leavename=false, $sample=false) {
if ($sample && ($begin = strpos($link, "?my_custom_post_type=")) !== false) {
return substr($link, 0, $begin-1) . "/%my_custom_post_type%/";
}
return str_replace("?my_custom_post_type=", "", $link) . "/";
}
public static function parse_query($query) {
global $wp, $wp_rewrite;
// Is this query for /%post_name%/? Is it main request query?
if (isset($query->query['name'])
&& substr($wp->matched_rule, 0, 7) == "([^/]+)"
&& isset($query->query)
&& isset($wp->query_vars)
&& $query->query == $wp->query_vars)
{
//echo '<p><h1>hit!</h1></p>';
if (!($post_types = get_query_var("post_type"))) {
if ($wp_rewrite->permalink_structure == "/%postname%/")
$post_types = array("post");
else
$post_types = array();
}
if (is_array($post_types))
$post_types[] = "my_custom_post_type";
set_query_var("post_type", $post_types);
//set_query_var("posts_per_page", 1);
}
}
public static function rewrite_rules_array($array) {
global $wp_rewrite;
// Same rules as in /%post_name%/
return array_merge($array, $wp_rewrite->generate_rewrite_rules("/%postname%/", EP_PERMALINK));
}
}
add_action('init', array("MyCustomPostType", "register_post_type"));