কাস্টম পোস্টের ধরণ, কর বিভাগ এবং পার্মলিংক


62

এটি আমাকে বাদাম চালিয়ে যাচ্ছে এবং আমি নিশ্চিত যে এটি সহজ তবে আমি যা অনুসন্ধান করি তা কিছুই সাধারণ কাঠামো নিয়ে আসে না (সবকিছু খুব জটিল)।

আমার একটি কাস্টম পোস্টের ধরণ product_listingএবং একটি কাস্টম শ্রেণীবদ্ধ রয়েছে product_cat(যা শ্রেণিবদ্ধ এবং এটি বিভাগগুলির মতো হওয়া উচিত)।

আমি কেবল আমার ইউআরএলগুলি দেখতে চাই:

mysite.com/products/category1/product-name1 
mysite.com/products/category2/product-name2

তবে আমার জীবনের জন্য, আমি যাই করুক না কেন, আমি ভয়ঙ্কর 404 সংখ্যাটি পাচ্ছি। পৃষ্ঠাগুলি ঠিক আছে এবং পোস্টগুলি ঠিক কাজ করে তবে আমার কাস্টম পোস্টগুলি সঠিকভাবে কাজ করে না। তারা এই হিসাবে প্রদর্শিত হচ্ছে:

mysite.com/products/product-name1
mysite.com/products/product-name2

যা আসলে কাজ করে ! এটি ঠিক যে আমি সেখানে আমার কাস্টম শৃঙ্খলা দেখতে চাই এবং taxonomy.phpআমি যে সেটআপটি সেটআপ করেছি সেটিতে যেতে পেরে আমি সক্ষম হতে চাই :

mysite.com/products/category1/
mysite.com/products/category2/

আমার কোনও স্লাগ একই রকম নয়, আমি চাই না সেগুলিও হোক। এখানে আমার functions.phpফাইলের পোস্টের ধরণ এবং বিভাগের অংশটি রয়েছে :

///// CUSTOM POST TYPES /////

// register the new post type
register_post_type( 'product_listing', array( 
    'labels'                 => array(
        'name'               => __( 'Products' ),
        'singular_name'      => __( 'Product' ),
        'add_new'            => __( 'Add New' ),
        'add_new_item'       => __( 'Create New Product' ),
        'edit'               => __( 'Edit' ),
        'edit_item'          => __( 'Edit Product' ),
        'new_item'           => __( 'New Product' ),
        'view'               => __( 'View Products' ),
        'view_item'          => __( 'View Product' ),
        'search_items'       => __( 'Search Products' ),
        'not_found'          => __( 'No products found' ),
        'not_found_in_trash' => __( 'No products found in trash' ),
        'parent'             => __( 'Parent Product' ),
    ),
    'description'           => __( 'This is where you can create new products on your site.' ),
    'public'                => true,
    'show_ui'               => true,
    'capability_type'       => 'post',
    'publicly_queryable'    => true,
    'exclude_from_search'   => false,
    'menu_position'         => 2,
    'menu_icon'             => get_stylesheet_directory_uri() . '/images/tag_orange.png',
    'hierarchical'          => true,
    '_builtin'              => false, // It's a custom post type, not built in!
    'rewrite'               => array( 'slug' => 'products', 'with_front' => true ),
    'query_var'             => true,
    'supports'              => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions' ),
) );


//hook into the init action and call create_book_taxonomies when it fires
add_action( 'init', 'create_product_taxonomies', 0 );
//add_action('admin_init', 'flush_rewrite_rules');

//create two taxonomies, genres and writers for the post type "book"
function create_product_taxonomies() {
    // Add new taxonomy, make it hierarchical (like categories)
    $labels = array(
        'name'              => _x( 'Categories', 'taxonomy general name' ),
        'singular_name'     => _x( 'Category', 'taxonomy singular name' ),
        'search_items'      =>  __( 'Search Categories' ),
        'all_items'         => __( 'All Categories' ),
        'parent_item'       => __( 'Parent Categories' ),
        'parent_item_colon' => __( 'Parent Categories:' ),
        'edit_item'         => __( 'Edit Category' ), 
        'update_item'       => __( 'Update Category' ),
        'add_new_item'      => __( 'Add New Category' ),
        'new_item_name'     => __( 'New Category Name' ),
        'menu_name'         => __( 'Category' ),
    );  

    register_taxonomy( 'product_cat', array( 'product_listing' ), array(
        'hierarchical'  => true,
        'labels'        => $labels,
        'show_ui'       => true,
        'query_var'     => true,
        //'rewrite'     => true,
        'rewrite'       => array( 'slug' => '%category%', 'with_front' => true ),
    ) );

    // Add new taxonomy, NOT hierarchical (like tags)
    $labels = array(
        'name'                       => _x( 'Scents', 'taxonomy general name' ),
        'singular_name'              => _x( 'Scent', 'taxonomy singular name' ),
        'search_items'               =>  __( 'Search Scents' ),
        'popular_items'              => __( 'Popular Scents' ),
        'all_items'                  => __( 'All Scents' ),
        'parent_item'                => null,
        'parent_item_colon'          => null,
        'edit_item'                  => __( 'Edit Scent' ), 
        'update_item'                => __( 'Update Scent' ),
        'add_new_item'               => __( 'Add New Scent' ),
        'new_item_name'              => __( 'New Scent Name' ),
        'separate_items_with_commas' => __( 'Separate scents with commas' ),
        'add_or_remove_items'        => __( 'Add or remove scents' ),
        'choose_from_most_used'      => __( 'Choose from the most used scents' ),
        'menu_name'                  => __( 'Scents' ),
    ); 

    register_taxonomy( 'scent', 'product_listing', array(
        'hierarchical'  => false,
        'labels'        => $labels,
        'show_ui'       => true,
        'query_var'     => true,
        //'rewrite'     => array( 'slug' => 'scents' ),
    ) );
}

আমার আরও একটি কাস্টম শৃঙ্খলা রয়েছে scentsযে আমি আদর্শগতভাবে কিছুটা বন্ধুত্বপূর্ণ ইউআরএল রাখতে চাই তবে আমি এতে আরও উন্মুক্ত। আমি যেতে গিয়ে সমস্ত সুগন্ধির একটি তালিকাতে অ্যাক্সেস করতে চাই mysite.com/products/scentsতবে সেগুলি বিভাগ নির্দিষ্ট করতে হবে না।

কেউ কি আমাকে সাহায্য করতে পারেন?

উত্তর:


63

পরিবর্তন slugকরার জন্য আপনার পোস্টের প্রকারের আর্গুমেন্ট products/%product_cat%, এবং slugআপনার বর্গীকরণ সূত্র আর্গুমেন্ট শুধু products, তারপর আপনার লেখা নিয়ম ফ্লাশ। ওয়ার্ডপ্রেস এখন হ্যান্ডেল করা উচিত /products/my-product-cat/post-name/!

এখন অবশেষে, আমাদের ওয়ার্ডপ্রেসকে পারমলিনাকগুলি তৈরি করার জন্য কিছুটা সহায়তা করা দরকার (বাক্সের বাইরে, এটি পারমাস্ট্রাক্ট ট্যাগটি চিনতে পারে না %product_cat%):

/**
 * Inject term slug into custom post type permastruct.
 * 
 * @link   http://wordpress.stackexchange.com/a/5313/1685
 * 
 * @param  string  $link
 * @param  WP_Post $post 
 * @return array
 */
function wpse_5308_post_type_link( $link, $post ) {
    if ( $post->post_type === 'product_listing' ) {
        if ( $terms = get_the_terms( $post->ID, 'product_cat' ) )
            $link = str_replace( '%product_cat%', current( $terms )->slug, $link );
    }

    return $link;
}

add_filter( 'post_type_link', 'wpse_5308_post_type_link', 10, 2 );

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

লেমমে আপনি কীভাবে এটি চালিয়ে যান তা জানেন এবং আমরা অন্যান্য সমস্যাগুলি মোকাবেলা করতে পারি!


ওহে বাহ আমি বিস্মিত! এই কাজ! অবশেষে! আমি কখনই কিছু ভেবে দেখিনি !!! আপনাকে অনেক ধন্যবাদ! ............ এখন, আমি কীভাবে নিজের মতো করে ওয়ার্ডপোমি ইউআরএল ধরার জন্য একটি লিঙ্ক (the_permalink এর মতো কিছু) তৈরি করব? / প্রোডাক্টস / আমার-পণ্য-বিড়াল /
রোডিও র্যামসে

আমি মনে করি যে আমি এটি শেষ করে ফেলেছি ^^^ ............ তবে এখন আমি প্যাজিনেশনে আটকেছি। যে কোনও পৃষ্ঠা বাছাই (কাস্টম ফাংশন বা বিল্টিন) / পণ্যগুলি / আমার-পণ্য-বিড়াল হিসাবে দেখায় / ঠিক আছে তবে / পণ্যগুলি / আমার-পণ্য-বিড়াল / পৃষ্ঠা / 2 / একটি 404 প্রদান করে এবং ট্যাক্সোনমি.এফপি ফাইলটি এতে ফেলে দেয় index.php ফাইলের পক্ষে favor আমি খুঁজে পেতে পারে এমন সব কিছু চেষ্টা করেছি এবং এখনও কিছুই পাই নি।
রোদেও র্যামসে

1
আপনি কি একক পণ্যটির পুনর্লিখনগুলিতে পরিবর্তনটি বিবেচনা করবেন product/cat-name/product-name? (এককত্ব নোট করুন) সমস্যাটি হ'ল করশ্রমীকরণ পৃষ্ঠার জন্য পুনর্লিখনের নিয়মটি ট্রিগার করা হয় না, কারণ এটি একক পণ্যগুলির পূর্ববর্তী নিয়মের দ্বারা ধরা পড়ে!
TheDeadMedic

আমি এটি উন্মুক্ত। তবে এটির চারপাশে আমার মাথা গুটিয়ে দেওয়ার জন্য, আপনি যদি কোনও একক পৃষ্ঠা পৃষ্ঠা বনাম একটি 'বিভাগ' পৃষ্ঠা দেখছেন তবে এর অর্থ কি পণ্যগুলির একটি আলাদা URL পাথ থাকবে? সুতরাং একক পণ্য / বিড়াল নাম / প্রোড-নাম হবে কিন্তু বিড়াল পণ্য / বিড়াল নাম / হবে ? "মানব বান্ধব" ইউআরএলগুলির উদ্দেশ্যকে কি এই ধরণের পরাভূত করবে না? আমার ক্লায়েন্টদের ডাব্লুপি ড্যাশবোর্ড শিখতে সহায়তা করতে খুব কষ্ট হচ্ছে এই পার্থক্যটি ... আমি যদি ভুল বোঝাবুঝি করি তবে আমাকে জানাবেন! আমি কোনও সামনের ডিরেক্টরি যেমন পণ্য-বিড়াল / পণ্য-নাম এবং কেবল পণ্য-বিড়াল / দিয়ে খুশি হতে পারি । কাজ করতে পারে?
রোদেও র্যামসে

2
আপনি এটা পেয়েছিলাম - যদিও আমি বলতে চাই এটা হল 'মানুষের বন্ধুত্বপূর্ণ ", সেখানে (আর্কাইভ মধ্যে একটি স্পষ্ট পার্থক্য products/) এবং একবচন আইটেম ( product/)। এবং না, আমি 'সামনের ডিরেক্টরি' রেখেছি - এটি পোস্ট এবং পৃষ্ঠাগুলির থেকে স্পষ্ট পার্থক্য রাখতে সহায়তা করে, অন্যথায় আপনি পারফরম্যান্স সংক্রান্ত সমস্যাগুলি (যেমন ভার্জোজ পুনর্লিখনের নিয়ম) দিয়ে শেষ করতে পারেন।
TheDeadMedic

6

ধন্যবাদ @ দ্য ডেডমেকানিক, আপনার উত্তর আমাকে সাহায্য করেছে, তবে কেবল আংশিকভাবে। @ রোডিও র্যামসে অনুরোধ করা একই জিনিসটি আমি করতে চেয়েছিলাম, তবে নেস্টেড বিভাগগুলির সাথে (যেমন mysite.com/products/category1/child-category-1/grandchild-category-1/product-name:) এবং আপনার সমাধান সেটির জন্য কার্যকর হয়নি।

অবশেষে আমি আমার প্রশ্নের বিস্তৃত সমাধান নিয়ে এসেছি যা কাজ করে, সুতরাং অন্য কারও যদি নেস্টেড বিভাগ / উপশ্রেণী বিভাগ প্রয়োজন হয় তবে আপনি আমার নিজের প্রশ্নের বিস্তারিত সমাধান দেখতে পারেন । আশা করি এটি অন্যকে সহায়তা করে এবং প্রাথমিক পদক্ষেপের জন্য ধন্যবাদ।


4

আমি নিশ্চিত নই যে ডব্লিউপি এই কাঠামোটিকে বাক্সের বাইরে সমর্থন করে - তবে আপনি এটি করতে খুব সহজেই নিজের পুনর্লিখনের নিয়ম তৈরি করতে পারেন।

এখানে পূর্ববর্তী উত্তরটি দেখুন Author লেখক ইউআরএল পুনর্লিখন

আপনি লাইন পরিবর্তন করতে পারেন

$newrules['author/([^/]+)/songs/?$'] = 'index.php?post_type=songs&author=$matches[1]';

মত কিছু

$newrules['products/([^/]+)/([^/]+)/?$'] = 'index.php?post_type=product_listing&product_cat=$matches[1]&name=$matches[2]';

এখানে প্রোডাক্ট_ক্যাট অংশটি অতিরিক্তহীন হতে পারে - এটির প্রয়োজন হয় কিনা তা সম্পর্কে আমি নিশ্চিত নই।

আপনি নিজের পছন্দ মতো কোনও বিধি যুক্ত করতে পারেন এবং অন্তর্নির্মিতগুলির চেয়ে তাদের অগ্রাধিকার থাকবে।


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

2

হ্যাঁ, এটি কাস্টম পোস্টের ধরণের জন্য permalink সেট করার আগে আমাকে পাগল করছে। আমি কাস্টম পোস্ট ধরণের হ্যান্ডেল করার জন্য একটি প্লাগইন পেয়েছি। এটি ব্যবহার করা খুব সহজ। http://wordpress.org/extend/plugins/custom-post-permalinks/ ডাব্লু পিপি এটির মূল বৈশিষ্ট্য হিসাবে যুক্ত করা উচিত! সিংহরাশি


আমি এটি আগেও দেখেছি এবং এটি ব্যবহার করা থেকে বিরত ছিল কারণ এটি "অ-শ্রেণিবদ্ধ জন্য" ট্যাক্সনোমির জন্য বলেছে। আমার এমন একটি ছিল যা শ্রেণিবিন্যাসে সেট করা হয়েছিল তাই আমি ভাবিনি এটি কাজ করবে, তবে এখনও পর্যন্ত মনে হয় এটি কৌশলটি সম্পন্ন করেছে! এছাড়াও, মনে হচ্ছে যে আমি / পণ্যগুলি / বিড়াল নাম / প্রোড-নাম / কাঠামোটি অর্জন করার চেষ্টা করছিলাম (অন্য উত্তরের মন্তব্য দেখুন)। @TheDeadMedic, এটি কি একটি কার্যকর বিকল্প? অথবা আমি ফাংশন.এফপি ফাইলের পুনর্লিখনের সাথে লেগে থাকতে পারি?
রোদেও র্যামসে

0

আসলে এটি বেশ সহজ। আপনার শুধু একটি লাইন দরকার। আমার কোড এখানে

ফাংশন ক্রিয়েট_প্রডাক্ট_ট্যাক্সোনোমিজ ()
{
// নতুন শ্রেণীবদ্ধ যুক্ত করুন, এটি শ্রেণিবদ্ধ করুন (বিভাগগুলির মতো)
    $ লেবেল = অ্যারে (
        'নাম' => _ x ('বিভাগ', 'শ্রেণীবদ্ধ সাধারণ নাম'),
        'একবাক্য_নাম' => _ x ('বিভাগ', 'শ্রেণিবদ্ধ একক নাম'),
        'অনুসন্ধান_সংশ্লিষ্ট' => __ ('অনুসন্ধান বিভাগগুলি'),
        'all_items' => __ ('সমস্ত বিভাগ'),
        'প্যারেন্ট_াইটেম' => __ ('মূল বিভাগ'),
        'প্যারেন্ট_ইটেম_কলোন' => __ ('মূল বিভাগ:'),
        'edit_item' => __ ('বিভাগ সম্পাদনা করুন'),
        'update_item' => __ ('আপডেট বিভাগ'),
        'add_new_item' => __ ('নতুন বিভাগ যুক্ত করুন'),
        'new_item_name' => __ ('নতুন বিভাগের নাম'),
        'মেনু_নাম' => __ ('বিভাগ'),
    );

    রেজিস্টার_ট্যাক্সনমি ('product_cat', অ্যারে ('product_listing'), অ্যারে (
        'শ্রেণিবদ্ধ' => সত্য,
        'লেবেল' => $ লেবেল,
        'show_ui' => সত্য,
        'ক্যোয়ারী_ভার' => সত্য,
        'পুনর্লিখন' => অ্যারে ('শ্রেণিবদ্ধ' => সত্য),
    ));

এবং জেনারেটডব্লু ডটকম থেকে আমার রিভিউ সিপিটির জন্য উত্সযুক্ত শ্রেণীবিন্যাসের জন্য প্রয়োগ হয়েছে। আমি এটি আমার নিজস্ব ওয়ার্ডপ্রেস সাইট, https://www.wpstarters.com এ ব্যবহার করছি

ফাংশন পর্যালোচনা_শ্রেণী_অক্ষেত্র () {

    $ লেবেল = অ্যারে (
        'নাম' => _ x ('পর্যালোচনা বিভাগ', 'শ্রেণীবদ্ধ সাধারণ নাম', 'পর্যালোচনা_শ্রেণী'),
        'একবাক্য_নাম' => _ x ('পর্যালোচনা বিভাগ', 'শ্রেণীবদ্ধ একক নাম', 'পর্যালোচনা_শ্রেণী'),
        'মেনু_নাম' => __ ('পর্যালোচনা বিভাগ', 'পর্যালোচনা_ বিভাগ'),
        'all_items' => __ ('সমস্ত পর্যালোচনা বিভাগ', 'পর্যালোচনা_শ্রেণী'),
        'প্যারেন্ট_াইটেম' => __ ('পিতামাতার পর্যালোচনা বিভাগ', 'পর্যালোচনা_শ্রেণী'),
        'প্যারেন্ট_াইটেম_কলোন' => __ ('পিতামাতার পর্যালোচনা বিভাগ:', 'পর্যালোচনা_শ্রেণী'),
        'new_item_name' => __ ('নতুন পর্যালোচনা বিভাগের নাম', 'পর্যালোচনা_শ্রেণী'),
        'add_new_item' => __ ('নতুন পর্যালোচনা বিভাগ যুক্ত করুন', 'পর্যালোচনা_শ্রেণী'),
        'edit_item' => __ ('পর্যালোচনা বিভাগ সম্পাদনা করুন', 'পর্যালোচনা_ বিভাগ'),
        'update_item' => __ ('পর্যালোচনা বিভাগ আপডেট করুন', 'পর্যালোচনা_শ্রেণী'),
        'ভিউ_াইটেম' => __ ('পর্যালোচনা বিভাগ দেখুন', 'পর্যালোচনা_ বিভাগ'),
        'পৃথক_সংশ্লিষ্ট_কম_কমাস' => __ ('কমা দিয়ে আইটেম আলাদা করুন', 'পর্যালোচনা_শ্রেণী'),
        'add_or_remove_items' => __ ('আইটেম যুক্ত বা সরান', 'পর্যালোচনা_শ্রেণী'),
        'choose_from_most_used' => __ ('সর্বাধিক ব্যবহৃত থেকে বেছে নিন', 'পর্যালোচনা_শ্রেণী'),
        'জনপ্রিয়_লম্বী' => __ ('জনপ্রিয় পর্যালোচনা বিভাগ', 'পর্যালোচনা_শ্রেণী'),
        'অনুসন্ধান_সংশ্লিষ্ট' => __ ('অনুসন্ধানের আইটেম', 'পর্যালোচনা_শ্রেণী'),
        'not_found' => __ ('পাওয়া যায়নি', 'পর্যালোচনা_শ্রেণী'),
        'no_terms' => __ ('পর্যালোচনা বিভাগ নেই', 'পর্যালোচনা_শ্রেণী'),
        'আইটেম_লিস্ট' => __ ('পর্যালোচনা বিভাগের তালিকা', 'পর্যালোচনা_ বিভাগ'),
        'আইটেম_লিস্ট_ন্যাভিগেশন' => __ ('বিভাগের তালিকা পর্যালোচনা পর্যালোচনা', 'পর্যালোচনা_শ্রেণী'),
    );
    gs আরোগুলি = অ্যারে (
        'লেবেল' => $ লেবেল,
        'শ্রেণিবদ্ধ' => সত্য,
        'সর্বজনীন' => সত্য,
        'show_ui' => সত্য,
        'show_admin_column' => সত্য,
        'show_in_nav_menus' => সত্য,
        'show_tagcloud' => মিথ্যা,
        'show_in_rest' => সত্য,
        'পুনর্লিখন' => অ্যারে ('শ্রেণিবদ্ধ' => সত্য),
    );
    রেজিস্টার_ট্যাক্সনমি ('পর্যালোচনা_শ্রেণী'), অ্যারে ('ডাব্লুপিএস_প্রিভিউ'), $ আরগস);

}
যোগ_অ্যাকশন ('init', 'রিভিউ_ক্যাটরি_ট্যাক্সোনমি', 0);

আপনার কেবল এটির জন্য তাই 'পুনর্লিখন' => অ্যারে ('শ্রেণিবদ্ধ' => সত্য) লিখুন,

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