Zrobiłem tę niestandardową taksonomię, która będzie kontrolować układ na pojedynczych słupkach, w zasadzie chcę dodać dwie opcje, Układ 1 i Układ 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 );
Możliwości są ustawione na niepoprawne wartości, aby zatrzymać edytowanie terminów, ale nie mogę uruchomić wp_insert_term.
Dodanie dwóch terminów do mojej niestandardowej taksonomii nie może być takie trudne, prawda?
Używanie tego do wstawiania terminu nie działa, chociaż jeśli zmieniłem niestandardową nazwę taksonomii na „kategorię”, tj. Domyślnie WP, działa dobrze. Co daje?
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' );
custom-taxonomy
andy
źródło
źródło
Odpowiedzi:
EDYCJA 2
Zgodnie z obietnicą, oto kod wtyczki.
Jest to znany fakt, że niestandardowe taksonomie i niestandardowe typy postów powinny wchodzić do wtyczki, a nie do motywu. Usunąłem części z mojej wtyczki.
JAK TO DZIAŁA
Taksonomia jest normalnie rejestrowana przez wtyczkę. Aby uzyskać wszelkie informacje na ten temat, możesz przejść i sprawdzić
register_taxonomy
. Część, którą chciałem podkreślić i co jest istotne dla tego pytania, to jak wstawić nowe warunki.Wstawianie terminów
wp_insert_terms
jest szybkie i łatwe, ale ten kod może również zaszkodzić czasowi ładowania, jeśli nie zostanie użyty poprawnie. Chodzi o to, aby uruchomić tę funkcję raz, a potem nigdy więcej, prawie jak usunięcie jej po pierwszym uruchomieniu.Aby to osiągnąć, musisz podłączyć swoją funkcję
register_activation_hook
. Ten hak jest uruchamiany raz, to znaczy, gdy wtyczka jest aktywowana, nie będzie ponownie uruchamiana po odświeżeniu strony. Jedynym razem, gdy ponownie się uruchomi, jest wyłączenie i ponowne włączenie wtyczkiMusisz więc najpierw zarejestrować swoją taksonomię, ponieważ nie możesz przypisać warunków do taksonomii, która nie istnieje. Po zarejestrowaniu systematyki możesz wstawić warunki. Pamiętaj, że ta akcja będzie miała miejsce tylko raz, i to wtedy, gdy wtyczka zostanie aktywowana. Jeśli chcesz dodać warunki, musisz dezaktywować wtyczkę i aktywować ją ponownie
Chcesz również najpierw sprawdzić, czy istnieje termin, zanim spróbujesz go utworzyć i wstawić.
Oto kod wtyczki
EDYCJA 1
Twój problem z wstawieniem warunków jest twoim hakiem.
after_setup_theme
działa wcześniejinit
, co oznacza, że próbujesz wstawić termin do taksonomii, która nie jest jeszcze zarejestrowana.Sugerowałbym, aby przenieść swoją
wp_insert_term
funkcję do wewnątrz funkcji init, tuż poniżejregister_taxonomy
Wskazane jest również, aby najpierw sprawdzić, czy istnieje termin (
term_exists
) przed wstawieniem goPrzykład:
Uwaga: to nie zostało przetestowane
ORYGINALNA ODPOWIEDŹ
Niestandardowe nazwy taksonomii (i niestandardowe nazwy typów postów) muszą być zgodne z bardzo konkretnym zestawem reguł, w przeciwnym razie napotkacie pułapki, na które nie można się obejść.
Oto przewodnik przy wybieraniu nazw dla niestandardowych systematyk (i niestandardowych typów postów)
Poniżej znajdują się nie dozwolone w nazwach niestandardowych taksonomii i nazwy niestandardowego typu pocztowych
Wielkie litery lub camelcase
Każdy typ znaku specjalnego, z wyjątkiem podkreślników (
_
)Przestrzenie
Ponad 32 znaki dla taksonomii i 20 dla typów postów
Wszelkie zastrzeżone nazwy , i pamiętaj, że dotyczy to dowolnej niestandardowej konwencji nazewnictwa, nie tylko nazw taksonomii.
Jeśli nazwa taksonomiczna zawiera więcej niż jedno słowo, należy je oddzielić podkreślnikami, a nie myślnikami (
-
). Rzucono mi wyzwanie, że łączniki są sposobem na SEO w adresach URL nazw taksonomii. To prawda, dlatego istnieją reguły przepisywania, które odpowiednio dostosowują adres URL. Nigdy nie zmieniaj nazw taksonomii ani nazw typów postów dla celów SEO adresów URLPowinieneś także usunąć te dziwne możliwości. Może to również powodować problemy
Jeśli to nie rozwiąże problemu, dodaj kod, którego używasz
wp_insert_term
Odniesienie:
register_taxonomy
register_post_type
źródło
$taxonomy
parametr wcale się nie dezynfekuje, jeśliquery_var
argument zostanie ustawiony natrue
. To naprawdę niewiarygodne. W przeciwnym razie zostanie zdezynfekowanysanitize_title_with_dashes()
, co, nomen es omen, zastąpi rzeczy kreskami w całym miejscu. Co również jest niewiarygodne, ponieważ nie należy ich używać.register_post_type()
.