web-dev-qa-db-fra.com

Comment déplacer l'auteur Metabox dans le "Publier" metabox?

Il y a environ un an, je me souviens d'avoir vu un plugin ou un code qui vous permettait d'ajouter un menu déroulant d'auteurs à la publication "publication" de la métabox au lieu d'être autonome.

Je n'arrive plus à trouver ce code et je me demandais si quelqu'un savait comment le faire facilement.

Dans une situation idéale, j'aimerais essentiellement ajouter une ligne supplémentaire sous la ligne "Visibilité:" du métabox Publier indiquant "Auteur:": avec le nom de l'auteur actuel et un lien d'édition après le nom. En cliquant sur le lien modifier, un menu déroulant apparaîtra avec les mêmes informations que celles disponibles dans l'auteur metabox.

En tout cas, j'apprécierais beaucoup de savoir comment cela peut être fait.

3
NetConstructor.com

Je suis un peu naze avec les trucs admin alors testez cela attentivement. J'ai eu quelques problèmes avec les utilisateurs qui ne venaient pas dans la liste déroulante, mais cela échoue aussi avec la méta-boîte par défaut - probablement à cause de ma pile de test foirée.

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>';
}
7
Rarst

Je sais que c'est une vieille question, mais une réponse mise à jour semble toujours pertinente à donner.

La réponse d'origine aurait peut-être été la meilleure option à l'époque, mais il manque une vérification si le type de publication prend en charge le changement d'auteur et l'adaptation au style de la boîte méta.

PHP principal

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';
        }
    }
});

Helper 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;
}

PHTML

<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%;
}

p.s. Si vous rencontrez des erreurs, cela peut être dû au fait que la version originale que j'ai utilisée est faite en SCSS, TypeScript et PHP 7.2. Et utilise un moteur de modèle personnalisé.

0
René

ou utilisez le plugin Adminimize pour personnaliser ceci via des options

0
bueltge