Редизайн страницы пользовательского типа «Добавить новый»

8

Я просматривал по всему Google для решения этой проблемы. Я пишу плагин для пользовательских типов постов для работы, чтобы войти в систему посетителей, которые мы получаем. Сначала я написал макет без пользовательских типов сообщений, затем пришел сюда из поиска в Google и увидел скриншот, на котором показан пример пользовательских типов сообщений для хранения информации об адвокатах. Это показало, что кто-то переработал страницу «Добавить новый» / «Редактировать» для пользовательских типов сообщений с совершенно новым интерфейсом.

Мне было интересно, будут ли у wordpress @ stackexchange какие-либо ресурсы для редизайна пользовательских страниц типа «добавление / редактирование».

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

Спасибо,
Зак

Zack
источник

Ответы:

11

Вопрос / ответ, на который вы ссылаетесь, был Советы по использованию WordPress в качестве CMS .

Снимки экрана, опубликованные в этом ответе, были созданы с использованием register_meta_box_cbаргумента, доступного для пользовательских типов записей.

register_meta_box_cb должна указывать функцию обратного вызова, которая содержит код для мета-блока.

Для создания мета-бокса вы можете использовать встроенную в WordPress функцию add_meta_box, которая также требует функцию сохранения введенных данных при сохранении записи.

Вот пример кода, который я создал, чтобы добавить 2 пользовательских мета-поля к моему типу публикации портфолио, который я использую на своем личном веб-сайте.

Созданный мной тип записи «Проекты» содержал этот аргумент:

'register_meta_box_cb' => 'c3m_project_meta',

Первая функция ниже - это функция обратного вызова для register_meta_box_cb. Следующие 2 выводят html для мета-полей на странице добавления поста, а последние 2 сохраняют введенные данные.

function c3m_project_meta() {
        add_meta_box('_c3m_project_url', __('Enter Website Url') , 'c3m_project_url', 'project', 'side', 'low');
        add_meta_box('_c3m_project_work', __('Enter Work Done on Project') , 'c3m_project_work', 'project', 'side', 'low');

        }


    function c3m_project_url($post) {
        global $post;
        echo  '<input type="hidden" name="banner-buttonmeta_noncename" id="banner-buttonmeta_noncename" value="' .
        wp_create_nonce( plugin_basename(__FILE__) ) . '" />';
        $projecturl = get_post_meta($post->ID, '_projecturl', true);
        echo '<input type="text" name="_projecturl" value="' . $projecturl . '" class="widefat" />' ; 
        }

    function c3m_project_work($post) {
        global $post;
        echo  '<input type="hidden" name="banner-buttonmeta_noncename" id="banner-buttonmeta_noncename" value="' .
        wp_create_nonce( plugin_basename(__FILE__) ) . '" />';
        $projectwork = get_post_meta($post->ID, '_projectwork', true);
        echo '<input type="text" name="_projectwork" value="' . $projectwork . '" class="widefat" />' ; 
        }


    add_action('admin_init', 'c3m_project_meta');



    function c3m_save_project_meta( $post_id , $post ) { 

        if ( !wp_verify_nonce( $_POST [ 'banner-buttonmeta_noncename' ], plugin_basename( __FILE__ ) )) { return $post ->ID; 

        }

        if ( !current_user_can( 'edit_post' , $post ->ID )) return $post ->ID; 
        $c3m_projecturl [ '_projecturl' ] = $_POST [ '_projecturl' ]; 
                    foreach ( $c3m_projecturl as $key => $value ) { 
                    if ( $post ->post_type == 'revision' ) return ; 

                    $value = implode( ',' , ( array ) $value );
                    if (get_post_meta( $post ->ID, $key , FALSE)) { 
                    update_post_meta( $post ->ID, $key , $value ); } else { 
                    add_post_meta( $post ->ID, $key , $value ); } if (! $value ) delete_post_meta( $post ->ID, $key ); 

                    }

        $c3m_projectwork [ '_projectwork' ] = $_POST [ '_projectwork' ]; 
                    foreach ( $c3m_projectwork as $key => $value ) { 
                    if ( $post ->post_type == 'revision' ) return ; 

                    $value = implode( ',' , ( array ) $value );
                    if (get_post_meta( $post ->ID, $key , FALSE)) { 
                    update_post_meta( $post ->ID, $key , $value ); } else { 
                    add_post_meta( $post ->ID, $key , $value ); } if (! $value ) delete_post_meta( $post ->ID, $key ); 

                    }
        }

   add_action( 'save_post' , 'c3m_save_project_meta' , 1, 2); 
Chris_O
источник
Ага, хорошо, так что это была просто метабокс, который я видел. Я подумал, что это был своего рода «взлом» для WordPress, смеется. Спасибо!
Зак
4

Когда я изучал тот же вопрос, я нашел эту статью довольно интересной:

Как создать собственный мета-бокс WordPress вместо использования пользовательских полей WordPress

Научившись создавать собственные мета-блоки WordPress, вы сможете создавать профессиональные элементы пользовательского интерфейса для себя и своих клиентов. Этот учебник мета-бокса WordPress покажет вам, как добавить элементы пользовательского интерфейса администратора на экраны редактирования поста / страницы.

Крис прав на деньги, хотя дополнительный ресурс не повредит :)

Ноэль Ток
источник