it-swarm.com.de

Wie verschiebe ich die Autoren-Metabox in die Metabox "Veröffentlichen"?

Ich erinnere mich, dass ich vor ungefähr einem Jahr ein Plugin oder einen Code gesehen habe, mit dem Sie ein Autoren-Dropdown-Menü zur Post-Metabox "Veröffentlichen" hinzufügen konnten, anstatt es für sich allein zu haben.

Ich kann diesen Code scheinbar nicht mehr finden und habe mich gefragt, ob jemand weiß, wie das einfach geht?

Im Idealfall möchte ich im Wesentlichen eine zusätzliche Zeile unter der Zeile "Sichtbarkeit:" in der Metabox "Veröffentlichen" mit der Angabe "Autor:" zusammen mit dem Namen des aktuellen Autors und einem Bearbeitungslink nach dem Namen hinzufügen. Wenn Sie auf den Link Bearbeiten klicken, wird ein Dropdown-Menü mit denselben Informationen angezeigt, die in der Autoren-Metabox verfügbar sind.

In jedem Fall würde ich mich sehr freuen zu wissen, wie dies getan werden kann.

3

Ich lutsche etwas an Admin-Dingen, also teste dies sorgfältig. Ich hatte einige Probleme mit Benutzern, die nicht in der Dropdown-Liste auftauchten, aber es schlägt auch mit der Standard-Meta-Box fehl - wahrscheinlich aufgrund meines durcheinandergebrachten Teststapels.

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

Ich weiß, es ist eine alte Frage, aber eine aktualisierte Antwort scheint immer noch relevant zu sein.

Die ursprüngliche Antwort war möglicherweise die beste Option zu diesem Zeitpunkt, es wird jedoch nicht überprüft, ob der Beitragstyp das Ändern des Autors und das Anpassen an den Meta-Box-Stil unterstützt.

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

Helfer 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. Wenn Sie auf Fehler stoßen, kann dies daran liegen, dass die von mir verwendete Originalversion in SCSS, TypeScript und PHP 7.2 erstellt wurde. Und verwendet eine benutzerdefinierte Template-Engine.

0
René

oder verwenden Sie das Plugin Adminimize, um dies über Optionen anzupassen

0
bueltge