netconstructorcom
  • 0
Мастер

Как переместить метабокс автора в метабокс «Опубликовать»?

  • 0

Около года назад я видел плагин или какой-то код, который позволял вам добавлять раскрывающееся меню автора в метабокс «публикация» сообщения вместо того, чтобы быть самостоятельным.

Кажется, я больше не могу найти этот код, и мне было интересно, знает ли кто-нибудь, как это легко сделать?

В идеальной ситуации я хотел бы по существу добавить дополнительную строку под строкой «Видимость:» в метабоксе публикации с указанием «Автор:» вместе с текущим именем авторов и ссылкой для редактирования после имени. При нажатии на ссылку редактирования появится раскрывающийся список с той же информацией, что и в метабоксе автора.

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

Share
  1. Я немного отстой с административными вещами, поэтому тщательно проверьте это. У меня были некоторые проблемы с пользователями, которые не появлялись в раскрывающемся списке, но он также не работает с метаполем по умолчанию — вероятно, из-за моего перепутанного тестового стека.

    add_action( 'admin_menu', 'remove_author_box' );
    add_action( 'post_submitbox_misc_actions', 'author_in_publish' );
    
    function remove_author_box() {
    
        remove_meta_box( 'authordiv', 'post', 'normal' );
    }
    
    function author_in_publish() {
    
        global $post_ID;
    
        $post = get_post( $post_ID );
        echo '<div class="misc-pub-section">Author: ';
        post_author_meta_box( $post );
        echo '</div>';
    }
    
    • 0
    • Чувак, это полностью работает! Замечательный! Единственное, я надеюсь, что вы сможете изменить это так, чтобы одно или оба из следующих действий могли иметь место. (а) он должен быть расположен в разделе «видимость» (б) он должен показывать текущего автора со ссылкой на редактирование рядом с ним, которая при нажатии на нее должна отображать раскрывающееся меню со ссылкой «ОК», как когда вы нажимаете на кнопку «ОК». отредактируйте ссылку на «статус». Сможешь это снять?

      • 0
    • Сразу после, крючка нет Visibility, это самое близкое, что я мог бы разместить. И, к сожалению, изменение механики определенно слишком сложно для моих навыков. Это потребовало бы написания элемента управления с нуля (вместо его перемещения) и возни с JavaScript.

      • 0
    • спасибо… кто-нибудь еще знает, как это сделать, пожалуйста, дайте мне знать

      • 0
  2. Я знаю, что это старый вопрос, но обновленный ответ все еще актуален.

    Первоначальный ответ, возможно, был лучшим вариантом в то время, но он не проверяет, поддерживает ли тип сообщения смену автора и соответствие стилю мета-поля.

    Основной PHP

    add_action('admin_menu', function (): void {
        $type = getCurrentPostType();
        if ($type) {
            remove_meta_box('authordiv', $type, 'normal');
        }
    });
    
    add_action('post_submitbox_misc_actions', function (): void {
        global $post, $user_ID;
    
        if (!empty($post)) {
            $supportsAuthor = post_type_supports($post->post_type, 'author');
    
            if ($supportsAuthor) {
                $userId = empty($post->ID) ? $user_ID : $post->post_author;
                $user = get_userdata($userId);
                echo '... fetch some template here';
            }
        }
    });
    

    Вспомогательный PHP

    function getCurrentPostType(): ?string {
        // https://gist.github.com/bradvin/1980309
        global $post, $typenow, $current_screen;
    
        if ($post && $post->post_type) {
            return $post->post_type;
        } elseif ($typenow) {
            return $typenow;
        } elseif ($current_screen && $current_screen->post_type) {
            return $current_screen->post_type;
        } elseif (isset($_REQUEST['post_type'])) {
            return sanitize_key($_REQUEST['post_type']);
        } elseif (isset($_REQUEST['post'])) {
            $p = get_post($_REQUEST['post']);
            if ($p) {
                return $p->post_type;
            }
        }
    
        // Unknown
        return null;
    }
    

    ПХТМЛ

    <div class="misc-pub-section misc-pub-author" id="author">
        <?=sprintf(__('Author: %s', 'aym'), "<b>{$user->display_name}</b>")?>
        <a href="#author" class="edit-author hide-if-no-js" role="button" aria-label='<?=__('Edit author', 'aym')?>'>
            <?=__('Edit', 'aym')?>
        </a>
    
        <div id="post-author-select" class="hide-if-js" style="display: none;">
            <?php post_author_meta_box($post)?>
    
            <p>
                <a href="#author" class="save-post-author hide-if-no-js button">OK</a>
                <a href="#author" class="cancel-post-author hide-if-no-js button-cancel">Cancel</a>
            </p>
        </div>
    </div>
    

    JavaScript

    (function($) {
        // Author select in admin edit sidebar
        var $baseEl = $('#author');
        var $select = $('select', $baseEl);
        var $form   = $('#post-author-select', $baseEl);
        var previousValue = $select.val();
        $('a[href="#author"]', $baseEl).on('click', function(e) {
            e.preventDefault();
            $form.slideToggle(300);
        });
    
        $('.save-post-author', $baseEl).on('click', function(e) {
            e.preventDefault();
            previousValue = $select.val();
            $('b', $baseEl).text($("option:selected", $select).text());
            $form.slideUp(300);
        });
    
        $('.cancel-post-author', $baseEl).on('click', function(e) {
            e.preventDefault();
            $select.val(previousValue);
            $form.slideUp(300);
        });
    })(jQuery);
    

    CSS

    .misc-pub-author::before {
        content: "\f110";
        color: #82878c;
        font: normal 20px/1 dashicons;
        speak: none;
        display: inline-block;
        margin-left: -1px;
        padding-right: 3px;
        vertical-align: top;
        -webkit-font-smoothing: antialiased;
        -moz-osx-font-smoothing: grayscale;
    }
    
    #post-author-select {
        padding-top: 5px;
    }
    
    #post-author-select select {
        width: 100%;
    }
    

    ps Если вы столкнулись с ошибками, это может быть связано с тем, что оригинальная версия, которую я использую, сделана в SCSS, TypeScript и PHP 7.2. И использует собственный механизм шаблонов.

    • 0
  3. или используйте плагин Adminimize для настройки этого с помощью опций

    • 0

Оставить ответ

You must login to add an answer.