Як додати елемент за замовчуванням до спеціальної систематики?


10

У таксономії Wordpress за замовчуванням (Категорії) є пункт Не категоризований за замовчуванням. Як додати елемент за замовчуванням до нової спеціальної систематики?

function.php:

// === CUSTOM TAXONOMIES === //
function my_custom_taxonomies() {
    register_taxonomy(
        'block',        // internal name = machine-readable taxonomy name
        'static_content',       // object type = post, page, link, or custom post-type
        array(
            'hierarchical' => true,
            'labels' => array(
                'name' => __( 'Blocks' ),
                'singular_name' => __( 'Block' ),
                'add_new_item' => 'Add New Block',
                'edit_item' => 'Edit Block',
                'new_item' => 'New Block',
                'search_items' => 'Search Block',
                'not_found' => 'No Block found',
                'not_found_in_trash' => 'No Block found in trash',
            ),
            'query_var' => true,    // enable taxonomy-specific querying
            'rewrite' => array( 'slug' => 'block' ),    // pretty permalinks for your taxonomy?
        )
    );
}
add_action('init', 'my_custom_taxonomies', 0);

EDIT: Я просто хочу, щоб елемент таксономії був там, коли тема встановлена. Його не потрібно автоматично додавати в будь-який порожній термін .

Відповіді:


8

Подивіться тут:

https://web.archive.org/web/20150403012347/http://wordpress.mfields.org/2010/set-default-terms-for-your-custom-taxonomies-in-wordpress-3-0/

В основному, вам потрібно скористатися гачком save_post, щоб перевірити умови для публікації та додати термін за замовчуванням із вашої таксономії, якщо він порожній.

Якщо ви просто хочете встановити початковий термін у вашій спеціальній таксономії, тоді ви можете використовувати wp_insert_term(). Напевно, найпростіше додати його в тій же функції, яку ви використовуєте для створення власної таксономії. Як додає t3ios у коментарях, вам слід зателефонувати get_term()спочатку і вставити термін лише у випадку, якщо значення повернення є нульовим (тобто термін не існує).

Цей приклад код походить із Codex: http://codex.wordpress.org/Function_Reference/wp_insert_term

$parent_term = term_exists( 'fruits', 'product' ); // array is returned if taxonomy is given
$parent_term_id = $parent_term['term_id']; // get numeric term id
wp_insert_term(
  'Apple', // the term 
  'product', // the taxonomy
  array(
    'description'=> 'A yummy apple.', 
    'slug' => 'apple', 
    'parent'=> $parent_term_id
  )
);

@anu Я думаю, що я не дуже добре пояснив себе, я просто хотів мати цю систематику там, коли тема встановлена. Це не має жодного терміна, якщо він порожній.
janoChen

@janoChen - я оновив відповідь
ану

@anu Чудово, хотілося б, щоб я міг проголосувати вашу відповідь більше. Я редагував питання. Де саме я повинен розмістити той код, про який ви писали вище?
janoChen

Код, який я додав, - лише приклад (і це з кодексу WordPress) - тому вам потрібно буде вносити зміни до нього за необхідності. Найкраще місце, щоб додати це було б безпосередньо перед заключним дужкою для функції.
ану

1
Ви впевнені, що хочете запустити вставку в цій функції, вона працює на init, тобто. кожну сторінку, я не думаю, що ви хочете запускати вставку кожного разу, коли сторінка викликається, чи не так? Можливо, функція вставлення повертає null / false, якщо відповідний термін вже існує з цим ім'ям (я не дивився), але все одно, що здається трохи непотрібним (чому б не зателефонувати get_term (s) і подивитися, чи він існує, тоді вставити, якщо ні).
t31os

4

Категорія за замовчуванням є твердим кодом у wp_insert_post()функції.

Тому його неможливо точно повторити, але ви можете впоратися з цим іншими способами. Я б спробував підключитися до переходу статусу публікації для нових постів і призначити потрібний термін за замовчуванням, якщо жоден не був призначений під час створення публікації.


+1 для посилання на гачок статусу публікації, саме це я шукав.
Метт

0

Використовуючи плагін за умовчанням, ви можете це зробити

register_taxonomy( 'custom-tax', array('post'), array(
    'label'              => 'Custom Tag',
    'public'             => true,
    'show_ui'            => true,
    'default_term'       => 'Some Default Term', // Add this line to your code 
// then activate and deactivate the default term plugin to save the terms you set.
));

За замовчуванням, коли повідомлення надсилається, він зберігає термін за замовчуванням у публікації, якщо термін не перевіряється. Він працює як для ієрархічної, так і не ієрархічної систематики.


Було б добре, якби він автоматично вибрав вказаний термін у вікні створення публікації, щоб користувач знав, що буде.
Гарконіс

0

Мені потрібно було заповнити користувацьку таксономію "Дні" з днями тижня. Я не хотів, щоб клієнт мав возитися зі створенням днів, або заходити туди і видаляти дні чи дні помилок. Дотримуючись наведених вище порад, я придумав це, але мені цікаво, чи існує більш стислий спосіб його кодування:

 /*************************************** ...Create a Custom Taxonomy for days ******************************/
add_action( 'init', 'build_taxonomies', 0 );  
function build_taxonomies() {  
    register_taxonomy( 
    'days', 
    'schedule',
   array( 'hierarchical' => true, 
    'label' => 'Days',
    'query_var' => true, 
    'show_ui' => false, //removes the menus from admin menu and edit panel  
    'rewrite' => true ) );  

/*---------------------------------------Check to see if the days are created..if not, create them----*/
$parent_term = term_exists( 'days', 'days' ); // array is returned if taxonomy is given
$parent_term_id = $parent_term['term_id']; // get numeric term id

wp_insert_term(//this should probably be an array, but I kept getting errors..
        'Monday', // the term 
        'days', // the taxonomy
        array(
        'slug' => 'monday',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Tuesday', // the term 
        'days', // the taxonomy
        array(
        'slug' => 'tuesday',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Wednesday', // the term 
        'days', // the taxonomy
        array(
        'slug' => 'wednesday',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Thursday', // the term 
        'days', // the taxonomy
        array(
        'slug' => 'thursday',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Friday', // the term 
        'days', // the taxonomy
        array(
        'slug' => 'friday',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Saturday', // the term 
        'days', // the taxonomy
        array(
        'slug' => 'saturday',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Sunday', // the term 
        'days', // the taxonomy
        array(
        'slug' => 'sunday',
        'parent'=> $parent_term_id ));
}
/************ now I add my own meta box for days to get rid of extra controls *************/

add_action('admin_menu', 'add_custom_categories_box');
function add_custom_categories_box() {
 add_meta_box('myrelateddiv', 'Days*', 'ilc_post_related_meta_box', 'schedule', 'normal', 'low', array( 'taxonomy' => 'days' ));
}

function ilc_post_related_meta_box( $post, $box ) {
  $defaults = array('taxonomy' => 'related');
  if ( !isset($box['args']) || !is_array($box['args']) )
  $args = array();
  else
  $args = $box['args'];
  extract( wp_parse_args($args, $defaults), EXTR_SKIP );
  $tax = get_taxonomy($taxonomy);
?>

  <ul id="<?php echo $taxonomy; ?>checklist" class="list:<?php echo $taxonomy?> categorychecklist form-no-clear">
<?php
  wp_terms_checklist($post->ID, array( 'taxonomy' => $taxonomy, 'popular_cats' => $popular_ids, 'checked_ontop' => FALSE ) )
?>
</ul>   
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.