একটি শুল্ক শুল্কে একটি শব্দ প্রবেশ করানো


9

এই কাস্টম বিভাগটি তৈরি করে যা একক পোস্টগুলিতে লেআউট নিয়ন্ত্রণ করবে, মূলত আমি দুটি বিকল্প, লেআউট 1 এবং লেআউট 2 যুক্ত করতে চাই।

// Register Custom Taxonomy
function custom_taxonomy() {

    $labels = array(
        'name'                       => _x( 'Layout', 'Taxonomy General Name', 'text_domain' ),
        'singular_name'              => _x( 'Layout', 'Taxonomy Singular Name', 'text_domain' ),
        'menu_name'                  => __( 'Taxonomy', 'text_domain' ),
        'all_items'                  => __( 'All Items', 'text_domain' ),
        'parent_item'                => __( 'Parent Item', 'text_domain' ),
        'parent_item_colon'          => __( 'Parent Item:', 'text_domain' ),
        'new_item_name'              => __( 'New Item Name', 'text_domain' ),
        'add_new_item'               => __( 'Add New Item', 'text_domain' ),
        'edit_item'                  => __( 'Edit Item', 'text_domain' ),
        'update_item'                => __( 'Update Item', 'text_domain' ),
        'separate_items_with_commas' => __( 'Separate items with commas', 'text_domain' ),
        'search_items'               => __( 'Search Items', 'text_domain' ),
        'add_or_remove_items'        => __( 'Add or remove items', 'text_domain' ),
        'choose_from_most_used'      => __( 'Choose from the most used items', 'text_domain' ),
        'not_found'                  => __( 'Not Found', 'text_domain' ),
    );
    $capabilities = array(
        'manage_terms' => 'foobar',
        'edit_terms'   => 'foobar',
        'delete_terms' => 'foobar',
        'assign_terms' => 'foobar' 
    );
    $args = array(
        'labels'                     => $labels,
        'hierarchical'               => true,
        'public'                     => true,
        'show_ui'                    => true,
        'show_admin_column'          => false,
        'show_in_nav_menus'          => false,
        'show_tagcloud'              => false,
        'capabilities'               => $capabilities,
    );
    register_taxonomy( 'Layout', array( 'post' ), $args );

}

// Hook into the 'init' action
add_action( 'init', 'custom_taxonomy', 0 );

শর্তাদি সম্পাদনা করা থেকে বিরত রাখতে সক্ষমতাগুলি অবৈধ মানগুলিতে সেট করা আছে তবে আমি wp_insert_term কাজ করতে পারি না।

আমার কাস্টম বিভাগে দুটি পদ যুক্ত করা এত কঠিন হতে পারে না, তাই না?

একটি শব্দ সন্নিবেশ করানোর জন্য এটি ব্যবহার করা কার্যকর হয় না, যদিও আমি যদি আমার কাস্টম শ্রেণিবদ্ধের নামটি 'বিভাগ', অর্থাৎ WP ডিফল্ট হিসাবে পরিবর্তন করি তবে এটি ঠিক কাজ করে। কি দেয়?

function example_insert_category() {
    $parent_term = term_exists( 'layout' ); // array is returned if taxonomy is given
$parent_term_id = $parent_term['term_id']; // get numeric term id
    wp_insert_term(
        'Example Category',
        'layout',
        array(
          'description' => 'This is an example category created with wp_insert_term.',
          'slug'        => 'example-category'
        )
    );
}
add_action( 'after_setup_theme', 'example_insert_category' );

প্রতিশ্রুতি অনুসারে, আমি প্লাগইনে কোড পোস্ট করেছি। আশা করি এটি সহায়তা করে :-)
পিটার গুজন

উত্তর:


12

সম্পাদনা 2

প্রতিশ্রুতি হিসাবে, এখানে প্লাগইনটির কোড is

এটা একটা পরিচিত সত্য যে কাস্টম taxonomies এবং কাস্টম পোস্ট ধরনের একটি প্লাগইন ঢোকা উচিত, এবং হয় না আপনার থিম হবে। আমি আমার প্লাগইন থেকে অংশ ছিনিয়ে নিয়েছি।

কিভাবে এটা কাজ করে

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

এর মাধ্যমে শর্তাদি সন্নিবেশ করানো wp_insert_termsদ্রুত এবং সহজ, তবে এই কোডটি সঠিকভাবে ব্যবহার না করা থাকলে লোডিংয়ের সময়টিকেও ক্ষতি করতে পারে। ধারণাটি হ'ল একবারে এই ফাংশনটি চালানো হবে এবং তারপরে আর কখনও হবে না, প্রায় প্রথম রান করার পরে এটি সরিয়ে ফেলার মতো।

এটি সম্পাদন করতে, আপনি আপনার ফাংশনটি হুক করতে চলেছেন register_activation_hook। এই হুকটি একবার চলে, প্লাগইনটি সক্রিয় হওয়ার পরে এটি পৃষ্ঠা রিফ্রেশে পুনরায় চালু হবে না। প্লাগইনটি নিষ্ক্রিয় করা এবং আবার সক্রিয় করা হলে এটি পুনরায় জ্বলবে

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

আপনি এটি তৈরি করতে এবং প্রবেশ করানোর চেষ্টা করার আগে কোনও পদ বিদ্যমান কিনা তাও আপনি প্রথমে পরীক্ষা করতে চান।

এখানে প্লাগইন কোড রয়েছে

<?php
/**
Plugin Name: Create terms
Plugin URI: http://wordpress.stackexchange.com/q/163541/31545
Description: Create terms
Version: 1.0
Author: Pieter Goosen
License: GPLv2 or later
*/
class Test_Terms {

    function __construct() {
        register_activation_hook( __FILE__,array( $this,'activate' ) );
        add_action( 'init', array( $this, 'create_cpts_and_taxonomies' ) );
    } 

    function activate() {
        $this->create_cpts_and_taxonomies();
        $this->register_new_terms();
    }

    function create_cpts_and_taxonomies() {

        $args = array( 
            'hierarchical'                      => true,  
            'labels' => array(
                'name'                          => _x('Test Tax', 'taxonomy general name' ),
                'singular_name'                 => _x('Test Tax', 'taxonomy singular name'),
                'search_items'                  => __('Search Test Tax'),
                'popular_items'                 => __('Popular Test Tax'),
                'all_items'                     => __('All Test Tax'),
                'edit_item'                     => __('Edit Test Tax'),
                'edit_item'                     => __('Edit Test Tax'),
                'update_item'                   => __('Update Test Tax'),
                'add_new_item'                  => __('Add New Test Tax'),
                'new_item_name'                 => __('New Test Tax Name'),
                'separate_items_with_commas'    => __('Seperate Test Tax with Commas'),
                'add_or_remove_items'           => __('Add or Remove Test Tax'),
                'choose_from_most_used'         => __('Choose from Most Used Test Tax')
            ),  
            'query_var'                         => true,  
            'rewrite'                           => array('slug' =>'test-tax')        
        );
        register_taxonomy( 'test_tax', array( 'post' ), $args );
    }

    function register_new_terms() {
        $this->taxonomy = 'test_tax';
        $this->terms = array (
            '0' => array (
                'name'          => 'Tester 1',
                'slug'          => 'tester-1',
                'description'   => 'This is a test term one',
            ),
            '1' => array (
                'name'          => 'Tester 2',
                'slug'          => 'tester-2',
                'description'   => 'This is a test term two',
            ),
        );  

        foreach ( $this->terms as $term_key=>$term) {
                wp_insert_term(
                    $term['name'],
                    $this->taxonomy, 
                    array(
                        'description'   => $term['description'],
                        'slug'          => $term['slug'],
                    )
                );
            unset( $term ); 
        }

    }
}
$Test_Terms = new Test_Terms();

সম্পাদনা 1

শর্তাদি সন্নিবেশ করাতে আপনার সমস্যা হুক। after_setup_themeএর আগে চলবে init, এর অর্থ হল আপনি কোনও করশাসনে একটি শব্দ প্রবেশ করানোর চেষ্টা করছেন যা এখনও নিবন্ধভুক্ত নয়।

আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি নিজের wp_insert_termফাংশনটি আপনার ডিএন ফাংশনের অভ্যন্তরে সরিয়ে নিন , ঠিক নীচেregister_taxonomy

এটি term_existsপ্রবেশের পূর্বে কোনও শব্দ উপস্থিত রয়েছে কিনা তা প্রথমে পরীক্ষা করার পরামর্শ দেওয়া হয়

উদাহরণ:

// Register Custom Taxonomy
function custom_taxonomy() {

   //CODE TO REGISTER TAXONOMY

   if( !term_exists( 'Example Category', 'layout' ) ) {
       wp_insert_term(
           'Example Category',
           'layout',
           array(
             'description' => 'This is an example category created with wp_insert_term.',
             'slug'        => 'example-category'
           )
       );
   }
}

// Hook into the 'init' action
add_action( 'init', 'custom_taxonomy', 0 );

দয়া করে মনে রাখবেন, এটি অনির্ধারিত

মূল উত্তর

কাস্টম ট্যাক্সনোমির নামগুলি (এবং কাস্টম পোস্টের প্রকারের নামগুলি) একটি খুব নির্দিষ্ট নিয়মের মেনে চলতে হবে, অন্যথায় আপনি এমন সমস্যার মুখোমুখি হবেন যেগুলির জন্য কোনও কাজ নেই।

কাস্টম ট্যাক্সোনমিগুলির (এবং কাস্টম পোস্টের প্রকারের) জন্য নামগুলি বেছে নেওয়ার সময় এখানে একটি গাইড লাইন রয়েছে

  1. নিম্নলিখিতটি কাস্টম বিভাগের নাম এবং কাস্টম পোস্টের নামগুলিতে অনুমোদিত নয়

    • মূল অক্ষর বা উটযুক্ত

    • আন্ডারস্কোর ( _) বাদে যে কোনও ধরণের বিশেষ অক্ষর

    • শূন্যস্থানের

    • ট্যাক্সোনমিগুলির জন্য 32 টিরও বেশি এবং পোস্টের ধরণের জন্য 20 টির বেশি অক্ষর

    • যে কোনও সংরক্ষিত নাম এবং দয়া করে নোট করুন, এটি কোনও শ্রেনী নাম নয়, কোনও কাস্টম নামকরণ কনভেনশনের জন্য ।

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

এছাড়াও, আপনার সেই অদ্ভুত ক্ষমতাগুলি সরিয়ে নেওয়া উচিত। এটি একটি সমস্যাও তৈরি করতে পারে

এটি যদি আপনার সমস্যার সমাধান না করে তবে দয়া করে আপনি যে কোডটি ব্যবহার করেন তা যুক্ত করুন wp_insert_term

রেফারেন্স:


উত্সটি দেখার পরে আমি কিছুটা স্ট্যাম্পড, কারণ যুক্তিটি সেট হয়ে গেলে $taxonomyপ্যারামিটারটি মোটামুটি স্যানিটাইজড হয় না । আসলে বেশ অবিশ্বাস্য। এবং অন্যথায় এটি স্যানিটাইজড হয়ে যায় , যা নামকরণ করা হবে, পুরো স্থান জুড়ে ড্যাশ সহ স্টাফ প্রতিস্থাপন করবে। যা অবিশ্বাস্যও, কারণ সেগুলি ব্যবহার করা উচিত নয়। query_vartruesanitize_title_with_dashes()
নিকোলাই

বিষয়টিকে বাদ দিয়ে, আপনি যে কোনও জায়গায়, আপনার পছন্দ মতো সংখ্যা ব্যবহার করতে পারেন, তাই শুরুতেও, যদিও আপনি সর্বত্র পড়তে পারেন যে এটি করা উচিত নয়। যদিও সংখ্যার বিরুদ্ধে একটি নির্দিষ্ট কারণ খুঁজে পেতে পারেনি। ড্যাশগুলির বিপরীতে, কমপক্ষে একটি বিবৃতি ছিল »এছাড়াও, পোস্টের ধরণে যদি ড্যাশ থাকে তবে আপনি কাস্টম পোস্ট টাইপের প্রশাসক পৃষ্ঠায় কলামগুলি যুক্ত করতে সক্ষম হবেন না ('কাস্টম পোস্টের প্রকারের নাম> _ পোস্ট_কলামগুলি' ক্রিয়া ব্যবহার করে) «এর কোডেক্স পৃষ্ঠায় register_post_type()
নিকোলাই

1
ওয়ার্ডপ্রেস এর ত্রুটি আছে, সম্মত হতে হবে। কিছু প্রকৃত অপরাধ :-)। আমি মনে করি ড্যাশগুলি সর্বাধিক আলোচিত বিষয় এবং নামগুলিতে সর্বাধিক ব্যবহৃত হয়। আপনি যখন টেম্পলেট শ্রেণিবিন্যাসের দিকে তাকাতে শুরু করেন তখন এর ব্যর্থতা বেশ স্পষ্ট। ড্যাশ দ্বারা পৃথক করা আমার-শ্রবণশক্তির মতো দুটি শব্দের সাথে একটি শৃঙ্খলা তৈরি করুন এবং একটি করতত্ত্বে টেম্পলেটটি কর-বিভাগ-মাই-ট্যাক্সোনমি.এফপি তৈরি করুন এবং আপনি ব্যর্থতা দেখতে পাবেন। আমি কোথাও নম্বরটি পড়েছি, আবার তা আবার পরীক্ষা করা দরকার। এটি একটি নিরাপদ সুরক্ষিত তালিকা যা আমি সর্বদা নিরাপদ থাকার জন্য ব্যবহার করি এবং এটি পুরোপুরি কার্যকর হয়েছে has আপনার সমস্ত তথ্যের জন্য ধন্যবাদ, প্রশংসা
পিটার গুসেন

1
আমি যেমন করি, তবে কেবল কারণ আমি এটি শুরু থেকে সঠিক উপায়ে শিখেছি। আমি যেমনটি ওয়ার্ডপ্রেস ডেভলপমেন্ট এবং এখানকার স্মার্ট এবং অভিজ্ঞ ব্যক্তিদের কাছ থেকে সবচেয়ে বেশি শিখেছি তা শিখলাম । সুতরাং অনেক ভুল আছে যা আমি আসলে নিজেকে করি নি।
নিকোলাই

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