it-swarm.dev

Jak přesunout Autor Metabox do "Publikovat" metabox?

Asi před rokem jsem si vzpomněl, že jsem viděl plugin nebo nějaký kód, který vám umožnil přidat rozbalovací nabídku autora do příspěvku "publikování" metabox místo toho, aby byl sám.

Zdá se, že tento kód už nemůžu najít a zajímalo by mě, jestli to někdo ví, jak to snadno udělat?

V ideálním případě bych rád v podstatě přidal další řádek pod řádek "Viditelnost" v rámci Publikovat metabox s názvem "Autor:" spolu s aktuálním jménem autorů a odkazem po názvu za názvem. Po kliknutí na odkaz úprav se zobrazí rozbalovací nabídka se stejnými informacemi, jaké jsou k dispozici v autorském metaboxu.

V každém případě bych velmi ocenil, jak to lze udělat.

3

Já trochu sát s admin věci, takže to pečlivě vyzkoušet. Měla jsem nějaké problémy s uživateli, kteří nepřišli v rozevíracím seznamu, ale selhali také s výchozím meta boxem - pravděpodobně proto, že jsem měl testovací zásobník.

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

Vím, že je to stará otázka, ale aktualizovaná odpověď se zdá být stále relevantní.

Původní odpověď mohla být v té době nejlepší volbou, ale chybí kontrola, zda typ příspěvku podporuje změnu autora a přizpůsobení ve stylu meta boxu.

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

Pomocník 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. Pokud narazíte na chyby, může to být způsobeno tím, že původní verze používaná v SCSS, TypeScript a PHP 7.2. A používá vlastní šablonu motoru.

0
René

nebo použijte plugin Adminimize pro přizpůsobení pomocí možností

0
bueltge