"স্লাগস" এর থিম স্থানীয়করণ (কাস্টম পোস্টের প্রকারগুলি, কর বিভাগগুলি)


17

আমার থিমটিতে আমি কাস্টম পোস্টের ধরণ এবং কাস্টম ট্যাক্সনোমির একটি ধারাবাহিক সংজ্ঞায়িত করতে চাই, প্রত্যেকের নিজস্ব কাস্টমাইজড স্লাগ রয়েছে; আমার থিমের মূল ভাষাটি ইংরেজি, সুতরাং স্লাগগুলি ইংরেজি ভাষায় থাকবে

উদাহরণস্বরূপ কাস্টম পোস্ট প্রকারের "পণ্য" অর্গগুলির স্লাগ সংজ্ঞায়িত করার সময়:

'rewrite' => array( 'slug' => 'product' ),

পো / মো ফাইলের মাধ্যমে "স্লাগ" অনুবাদ করার কোনও উপায় আছে কি? আমি কি এটি হিসাবে রাখতে পারি:

'rewrite' => array( 'slug' => __('product', 'mytextdomain') )

বা এটি কাজ করবে না? স্লাগগুলি স্থানীয়করণের বর্তমান অনুশীলনটি কী?


আমি জানি না আমরা একই সমস্যাটি মোকাবেলা করছি কিনা তবে মনে হয় এটির মতো। এটিকে আরও ভালভাবে বোঝানোর জন্য এখানে একটি স্লাগ সেট সহ কাস্টম পোস্ট টাইপের একটি মূল সূচক পৃষ্ঠার লিঙ্ক । ডাব্লুপিএমএল ব্যবহার করে অনুবাদকের পৃষ্ঠার স্লাগটি হ'ল এটি আবার হতে পারে না: / এন / প্রেস / যা কোনও কিছুই প্রদর্শন করে না (নোট করুন যে এখন ইএস লিঙ্কটি ক্লিক করা আপনাকে / প্রেনসায় / ফিরিয়ে আনবে না)। তবে আপনি যদি / এন / প্রেন্সা যান / এটি কাজ করে ...prensaprensapressprensa
নাওস গোল্ডেন

আমি সিদ্ধান্ত নিয়েছি পৃষ্ঠাগুলি / en / প্রেস থেকে / en / prensa এ পুনঃনির্দেশ করুন যাতে লিঙ্কটি সম্ভবত আর উল্লিখিত হিসাবে কাজ করবে না। এটা খুব খারাপ, আমি স্থানীয় স্লাগ্ কিন্তু কাজ-অন-সময় ভাল thant URL-স্থানীয়করণ বান্ধব ব্যবহার করতে পারে
Naoise গোল্ডেন

আমার উত্তরটি নাওয়েস দেখুন, আমি মনে করি এটি আপনাকে একটি কার্যকর সমাধান দেবে।
chrisguitarguy

আমি ঘন্টা কয়েক এই সমস্যা ছিল। অবশেষে আমি একটি হ্যাক পেয়েছি: github.com/stouch/wp-plugin-polylang-localized-taxonomy-slug/… শুভেচ্ছা।
সিলভেন টেক

উত্তর:


19

আমি আপনার স্লাগগুলি স্থানীয়করণের চেষ্টা করব না। পরিবর্তে, আপনার ব্যবহারকারীদের পারমালিংক সেটিংস পৃষ্ঠায় অন্য ক্ষেত্র যুক্ত করে তাদের পরিবর্তন করার বিকল্পটি কেন দিচ্ছেন না?

মধ্যে হুক load-options-permalink.phpএবং ধরা কিছু জিনিস স্থাপন $_POSTআপনার স্লাগ্ সংরক্ষণ করতে ডেটা। পৃষ্ঠায় একটি সেটিংস ক্ষেত্র যুক্ত করুন।

<?php
add_action( 'load-options-permalink.php', 'wpse30021_load_permalinks' );
function wpse30021_load_permalinks()
{
    if( isset( $_POST['wpse30021_cpt_base'] ) )
    {
        update_option( 'wpse30021_cpt_base', sanitize_title_with_dashes( $_POST['wpse30021_cpt_base'] ) );
    }

    // Add a settings field to the permalink page
    add_settings_field( 'wpse30021_cpt_base', __( 'CPT Base' ), 'wpse30021_field_callback', 'permalink', 'optional' );
}

তারপরে সেটিংস ক্ষেত্রের জন্য কল ব্যাক ফাংশন:

<?php
function wpse30021_field_callback()
{
    $value = get_option( 'wpse30021_cpt_base' );    
    echo '<input type="text" value="' . esc_attr( $value ) . '" name="wpse30021_cpt_base" id="wpse30021_cpt_base" class="regular-text" />';
}

তারপরে আপনি যখন আপনার পোস্টের ধরণটি নিবন্ধভুক্ত করবেন তখন স্লাগটি সাথে দখল করুন get_option। যদি এটি না থাকে তবে আপনার ডিফল্ট ব্যবহার করুন।

<?php
add_action( 'init', 'wpse30021_register_post_type' );
function wpse30021_register_post_type()
{
    $slug = get_option( 'wpse30021_cpt_base' );
    if( ! $slug ) $slug = 'your-default-slug';

    // register your post type, reference $slug for the rewrite
    $args['rewrite'] = array( 'slug' => $slug );

    // Obviously you probably need more $args than one....
    register_post_type( 'wpse30021_pt', $args );
}

এখানে প্লাগইন হিসাবে সেটিংস ক্ষেত্রের অংশটি https://gist.github.com/1275867

সম্পাদনা: অন্য একটি বিকল্প

WPLANGধ্রুবকটিতে যা সংজ্ঞায়িত হয়েছে তার ভিত্তিতে আপনি স্লাগও পরিবর্তন করতে পারেন ।

কেবল একটি দ্রুত ফাংশন লিখুন যা ডেটা ধারণ করে ...

<?php
function wpse30021_get_slug()
{
    // return a default slug
    if( ! defined( 'WPLANG' ) || ! WPLANG || 'en_US' == WPLANG ) return 'press';

    // array of slug data
    $slugs = array( 
        'fr_FR' => 'presse',
        'es_ES' => 'prensa'
        // etc.
    );

    return $slugs[WPLANG];
}

তারপরে স্লাগটি পান যেখানে আপনি নিজের কাস্টম পোস্টের ধরণটি নিবন্ধ করুন।

<?php
add_action( 'init', 'wpse30021_register_post_type' );
function wpse30021_register_post_type()
{
    $slug = wpse30021_get_slug();

    // register your post type, reference $slug for the rewrite
    $args['rewrite'] = array( 'slug' => $slug );

    // Obviously you probably need more $args than one....
    register_post_type( 'wpse30021_pt', $args );
}

আইএমও, সর্বোত্তম বিকল্পটি উভয়ই ব্যবহারকারীকে একটি বিকল্প প্রদান এবং কঠিন ডিফল্ট সরবরাহ করতে হবে:

<?php
add_action( 'init', 'wpse30021_register_post_type' );
function wpse30021_register_post_type()
{
    $slug = get_option( 'wpse30021_cpt_base' );
    // They didn't set up an option, get the default
    if( ! $slug ) $slug = wpse30021_get_slug();

    // register your post type, reference $slug for the rewrite
    $args['rewrite'] = array( 'slug' => $slug );

    // Obviously you probably need more $args than one....
    register_post_type( 'wpse30021_pt', $args );
}

2
গিস্টে প্লাগইন এবং ভাল ডকুমেন্টেড কোডের জন্য +1। আমার ক্ষেত্রে, যদিও, এটা উদ্দেশ্য, যা হয় পরাজিত দিতে ব্যবহারকারী করার ক্ষমতা কিন্তু স্থানীয়করণ সচেতন (গুগল বন্ধুত্বপূর্ণ) জন্য URL গুলি করতে কাস্টম পোস্ট ধরনের
Naoise গোল্ডেন

1
আমি নিশ্চিত না কেন আমি বুঝতে পেরেছি কেন আপনি আপনার ব্যবহারকারীর কাছ থেকে কোনও বিকল্প অপসারণ করতে চান। আরও বেশি, অনুবাদ ফিল্টারের মাধ্যমে একটি স্লাগ চালানো তাদের একই বিকল্পটি দেয়: স্লাগ পরিবর্তন করতে। পূরণ করার জন্য কেবল একটি সুন্দর ফর্ম ফিল্ড সহ নয়।
chrisguitarguy

1
শুধু কৌতূহল জন্য, কেন wpse30021?
নাওস গোল্ডেন

দেখে মনে হচ্ছে এই বিকল্পটি ডাব্লুপিএলএএন-ভিত্তিক স্থানীয়করণের জন্য। তবে আপনি যদি কোনও বহু ভাষার সাইট নিয়ে কাজ করছেন? (উদাহরণস্বরূপ ডাব্লুপিএমএল প্লাগইন)। সার্ভারের বিকল্পগুলি থেকে কাস্টম পোস্ট টাইপ স্লাগ সেট করতে সক্ষম হওয়ার চেয়ে ক্লায়েন্টের স্থানীয়করণের উপর নির্ভর করে একটি আলাদা স্লাগ প্রদর্শন করার বিষয়ে প্রশ্নটি আরও ।
নাওস গোল্ডেন

wpse = ওয়ার্ডপ্রেস স্ট্যাক এক্সচেঞ্জ। 30021 URL থেকে নম্বর। আপনার উদ্দেশ্য সাথে সৌভাগ্য কামনা করছি; আমি আমার উত্তর দিয়েছি। আপনি যে অতিরিক্ত জটিলতা যুক্ত করছেন এবং মূল প্রশ্নটির আপাত সম্পূর্ণ পরিবর্তন - মূলত সিপিটি স্লাগগুলি সম্পর্কে, কেবলমাত্র শেষ ব্যবহারকারীকে তাদের নিজস্ব স্লাগ বেছে নেওয়ার অনুমতি দেওয়ার ক্ষেত্রে কেস তৈরি করে।
chrisguitarguy

2

যদি এটি কাজ না করে তবে আপনি সাধারণ কাজটি করেন না কেন:

$post_slug=  __('product', 'mytextdomain');
'rewrite' => array( 'slug' => $post_slug );

এটি আমার পক্ষে কার্যকর হয়নি
নাওস গোল্ডেন

এটি অন্য শৈলীতে মূলত একই কোড
নাওস গোল্ডেন

আপনি কি সঠিক পাঠ্য ডোমেন যুক্ত করেছেন? <? পিএইচপি লোড_থমে_টেক্সটডোমেন (আমার_টেক্সট_ডোমাইন);?>?
chifliiiii

এটি এখন পর্যন্ত, সেরা সমাধান।
আল রোসাদো

2

আমরা যে থিমটি বিকাশ করছি ঠিক তেমনই করছি। এটি 5 টি পৃথক ভাষায় উপলভ্য, এবং প্রতিটি ভাষার বিভাগগুলির একটি অনুবাদকৃত সেট রয়েছে। থিমের ইউআরএলটির প্রথম উপাদানটি কোন ভাষাটি ব্যবহৃত হয় তা নির্ধারণ করতে দেশ-ভাষা ফর্ম্যাটে পার্স করা হয়েছে:

/uk-en
/fr-fr
/it-it

এবং তারপরে অনুবাদকৃত বিভাগগুলি URL এর আরও উপাদান হিসাবে পার্স করা হয়েছে।

ইউআরএল-এ পার্স করা হয়েছে parse_request পর্বে :

function my_parse_request( $wp ) {
    $path = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );

    $components = preg_split('|/|', $path, null, PREG_SPLIT_NO_EMPTY );

    // Determine language from $components[0]
    $language = array_shift( $components );
    ...

    // Load translations file...
    $mofile = get_stylesheet_directory()."/$language.mo";

    load_textdomain( 'mydomain', $mofile );

    ...

    // Determine category from $components[0]
    if( __( 'some-category', 'mydomain' ) == $components[0] )
      $wp->query_vars['category'] = 'some-category';

    ...
}
add_action( 'parse_request', 'my_parse_request' );

এই উদাহরণটি প্রয়োজনীয় চেক বিহীন, তবে এটি কেবল উদাহরণ হিসাবে বোঝানো হয়েছে।

অবশ্যই এই পদ্ধতির অসুবিধা আছে, তবে এটি সমস্ত ভাষায় প্রাকৃতিক URL গুলিকে মঞ্জুরি দেয়। আমি যে প্রধান ত্রুটিগুলি দেখছি তা হ'ল:

1) এটি পারমালিঙ্ক প্রক্রিয়াটি ব্যবহার করে না। এটি সম্ভবত বাড়ানো যেতে পারে যাতে সমস্ত ভাষার জন্য যথাযথ permalink নিয়ম উত্পন্ন হয় এবং parse_request প্রয়োজনীয় হবে না, তবে সমস্ত ভাষার জন্য এটি করা একটি লুপের পরে এক এমও ফাইল লোড করা জড়িত, এবং আমি না এটি কতটা সমর্থিত তা জানেন।

2) যদি কোনও অনুবাদক কোনও স্লাগ পরিবর্তন করেন তবে লিঙ্কগুলি অবৈধ হয়ে যায়।


0

আপনি আপনার এটি চেষ্টা করতে পারে functions.php

<?php
add_filter('rewrite_slugs', function($translated_slugs) {
    // the possible translations for your slug 'product'
    $translated_slugs = array(
        'product' => array(
            'pt' => array(
                'has_archive' => true,'rewrite' => array('slug' => 'produto'),
            ),
            'es' => array(
                'has_archive' => true,'rewrite' => array('slug' => 'producto'),
            ),
        ),
    );
    return $translated_slugs;
});
?>

যেমন এখানে দেখা


-1

আমি স্লাগগুলি অনুবাদযোগ্য না করার পরামর্শ দেব ।

অনুবাদ ব্যবহারকারী-মুখোমুখি সাইটের সামগ্রীর জন্য । স্লাগগুলি অভ্যন্তরীণভাবে ব্যবহৃত হয় এবং কেবল ইউআরএল পুনর্লিখনের মাধ্যমে প্রান্তিক "জন-মুখোমুখি" হয় - এবং ইউআরএলগুলি অনুবাদযোগ্যও হবে না

সুতরাং: আপনার স্লাগগুলি যেমন আপনি সংজ্ঞায়িত করেন তেমন ছেড়ে দিন। কেবল অনুবাদযোগ্য স্ট্রিংগুলি তৈরি করুন যা জনসাধারণের জন্য ব্যবহারের উদ্দেশ্যে ।


11
এসইও এবং ব্যবহারকারীর অভিজ্ঞতার দৃষ্টিকোণ থেকে অনুবাদ করা
স্লাগগুলি

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

3
আমি অভিজ্ঞতার ভিত্তিতে একমত নই। আমাদের ঘরে ঘরে বিদেশি কন্টেন্ট ম্যানেজার রয়েছে যারা স্পষ্টভাবে জানায় যে ইউআরএল স্লাগগুলি স্থানীয় করা উচিত। বিদেশী ব্যবহারকারীর জন্য এটি একটি সম্পূর্ণ / লায় স্থানীয় অভিজ্ঞতা তৈরির বিষয়। জাপানের মতো কয়েকটি দেশের পক্ষে একটি খাঁটি ধরণের বিশ্বাস স্থাপন করা আক্ষরিক অর্থে অপরিহার্য এবং এটি বোঝাচ্ছে যে আপনি সেখানে ব্যবসা করার বিষয়ে সত্যই গুরুতর।
internetross

ইউআরএল অবশ্যই কথা বলতে হবে। সুতরাং স্লাগ যদি সত্তা বা বিভাগের নাম হয় (প্রায়শই) হয় তবে পুনর্লিখনটি অনুবাদগুলির পাশাপাশি বহুবচনগুলিকেও বিবেচনা করতে হবে। এটি কোনও বিকল্প নয়, উভয়ের জন্য এসইও এবং শেষ ব্যবহারকারীদের জন্য কেবল ভাল অনুশীলন।
লুকা রেগেলিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.