Добавьте выбор категории к пользовательскому типу сообщения (плагин)

Я забрал чей-то старый проект в компании, в которой я работаю. Они создали плагин для добавления курсов к веб-сайту (включая даты, местоположение и т.д.), но они не добавили возможность выбрать категорию для курса.

Я хочу добавить эту функцию, которую я попробовал путем рассмотрения их другого кода, и копируйте/вставляйте его и адаптация его так, это соответствует моим потребностям.

Это действительно обнаруживается на правой стороне страницы, но независимо от того, что я делаю, это никогда не помнит категории. Category selection showing

Я также адаптировал функцию "POST" ниже в файле, но я предполагаю, что все еще пропускаю часть кода, который на самом деле активирует выбор категории, поскольку это также не обнаруживается в обзоре всех курсов:

No category displayed

Предыдущий разработчик работал с add_meta_box создать поля на стороне. Я создал следующее:

add_meta_box(
        'course_category_box',          // Unique ID 
        esc_html__( 'Category', 'Category Box' ),       // Title
        'render_course_category_box',       // Callback function
        'course',                   // Admin page (or post type)
        'side',                 // Context
        'default'                   // Priority
    );

При помощи которого я призвал

<?php
    function render_course_category_box( $object, $box ) {

        wp_nonce_field( basename( __FILE__ ), 'course_category_box_nonce' ); ?>
    <p>
         <?php wp_dropdown_categories( $args ); ?> 
    </p>
<?php } ?>

И также добавил его к save_course_meta_boxes функция.

if ( !isset( $_POST['course_category_box_nonce'] ) || !wp_verify_nonce( $_POST['course_category_box_nonce'], basename( __FILE__ ) ) )
        return $post_id;

Теперь, я, вероятно, делаю что-то, что является слишком сложным, поскольку Wordpress часто имеет намного более легкий способ добавить функции как они.

Я надеюсь, что достаточно ясно, какова моя проблема. В противном случае попросите больше информации!

0
03.03.2014, 13:04
3 ответа

Кроме того, к ответу Кайзера, когда Вы регистрируете тип сообщения, просто использование taxonomies атрибут:

register_post_type( 'my-cpt', array(
  ...
  'taxonomies' => array( 'category' ),
  ...
) );

Детали о register_post_type() может быть найден здесь в Кодексе.

3
19.02.2020, 23:38
  • 1
    Каждый раз, когда я редактирую мой register_post_type к чему-то подобному, как Вы пишете, это удаляет некоторые функции (исчезает из левого меню и т.д.) от исходного плагина, потому что это использовало $args прежде. Это также все еще не сохраняет категорию. –  Rvervuurt 03.03.2014, 13:58
  • 2
    Если Вы звоните register_post_type( 'course', $args ) затем Вы захотите установить $args['taxonomies'] = array( 'category' ); –  Stephen Harris 03.03.2014, 14:02

Когда Ваша таксономия уже регистрируется (или встроенный как теги сообщения, категории, и т.д.), можно просто склеить ее к типу сообщения при помощи register_taxonomy_for_object_type():

register_taxonomy_for_object_type( 'category', 'course' );

Просто удостоверьтесь, что Вы делаете это после того, как и таксономия и тип сообщения уже регистрируются.

1
19.02.2020, 23:38

Дополнительная информация для ответа @StephenHarris:

Когда Вы регистрируете таксономию, и сообщение вводят и хотят соединить их, существует одно важное правило:

Всегда регистрируйте таксономию сначала. Затем зарегистрируйте тип сообщения.

Причина проста: Смотрите на источник register_taxonomy():

// Adds the 2nd argument ($object_type) to the arguments:
$args['object_type'] = array_unique( (array) $object_type );

// ...

// Then the taxonomy gets added the complete Array $args as object
$wp_taxonomies[ $taxonomy ] = (object) $args;

И когда Вы смотрите на источник register_post_type():

foreach ( $args->taxonomies as $taxonomy ) {
    register_taxonomy_for_object_type( $taxonomy, $post_type );
}

Таким образом, это звонит register_taxonomy_for_object_type() и это перестанет работать, если не и таксономия будет зарегистрирована глобально и тип сообщения, существует. Если Вы сделаете его наоборот и зарегистрируете CPT сначала, то это просто перестанет работать.

1
19.02.2020, 23:38

Теги

Похожие вопросы