Wordpress - CPT, ACF - Как настроить страницу редактирования сообщения администратора? - PullRequest
1 голос
/ 14 января 2020

Я хочу отредактировать / настроить страницу редактирования сообщения администратора.

Описание

  • Я создал пользовательский тип сообщения

  • Созданы две группы групп расширенных пользовательских полей, group_1 и group_2 (каждая включает несколько настраиваемых полей)

  • Созданы два пользовательских типа ролей пользователя user_type_1 и user_type_2

Цель

  • Я хочу, чтобы user_type_1 мог писать group_1 и читать только group_2.
  • Я хочу, чтобы user_type_2 мог писать group_2 и читать только group_1.

Вопрос

  • Как мне отредактировать администратор редактировать пост? (Какие действия вызывать, чтобы манипулировать ими?)

  • Какие действия удалить тело по умолчанию в элементе id="post-body-content"

  • Пользовательский рендеринг тела ACF в элементе id="postbox-container-2"

1 Ответ

0 голосов
/ 14 января 2020

Я буду создавать сценарий jQuery, который установит поля ввода только для чтения с $('input').attr('readonly', true); (упрощенно), основываясь на текущей роли пользователя.

Я боялся, что когда я не сделаю это поле, оно не сохранит серые поля обратно в БД.

Это полный код, который кому-нибудь понадобится в будущем:

add_action('admin_head', 'rtt_conditional_acf_post_input');

function rtt_conditional_acf_post_input()
{

    $role = rtt_get_current_user_roles();

    $target = null;
    if (in_array("user_type_1", $role)) {
        $target = '#acf-group_5e1d936b7e583'; // <--- element id of group_1

    } else if (in_array("user_type_2", $role)) {
        $target = '#acf-group_5e1d93bdf2a56'; // <--- element id of group_2
    }


    if($target) {
        ?>

        <script type="application/javascript">

            $ = jQuery;
            $(document).ready(function () {

                let target = '<?php echo $target; ?>';

                $(target).find("input").each(function () {
                    $(this).attr('readonly', true);
                });

            });
        </script>
        <?php
    }
}

function rtt_get_current_user_roles()
{
    if (is_user_logged_in()) {
        $user = wp_get_current_user();
        $roles = ( array )$user->roles;
        return $roles; // This returns an array
        // Use this to return a single value
        // return $roles[0];
    } else {
        return array();
    }
}

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

...