web-dev-qa-db-ja.com

Author Metaboxを「Publish」メタボックスに移動する方法

約1年前、私はあなたが投稿 "publishing"メタボックスに独自のものではなく作者のドロップダウンメニューを追加することを可能にするプラグインかいくつかのコードを見たのを覚えています。

私はもうこのコードを見つけることができないようで、誰かがこれを簡単にする方法を知っているかどうか疑問に思いましたか?

理想的な状況では、Publishメタボックス内の "Author:"という行の下に、 "Visibility:"行の下に現在の著者名とその名前の後に編集リンクを追加します。編集リンクをクリックすると、ドロップダウンが著者メタボックスで利用可能であるのと同じ情報で現れるでしょう。

いずれにせよ、私はこれがどのように行われることができるかを知っていることを大いに感謝するでしょう。

3

私は管理者のものでやや吸うので、これを慎重にテストしてください。ユーザーがドロップダウンに表示されないという問題がいくつかありましたが、デフォルトのメタボックスでも失敗します - おそらく私のめちゃくちゃになったテストスタックが原因です。

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

私はそれが古い質問であることを知っています、しかし更新された答えはまだ与えることに関連があるようです。

当時は元の答えが最善の選択肢だったかもしれませんが、投稿の種類が作者の変更とメタボックススタイルへの適合をサポートしているかどうかのチェックに失敗します。

メイン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;
}

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

pSエラーが発生した場合は、私が使用しているオリジナルバージョンがSCSS、TypeScript、およびPHP 7.2で作成されていることが原因と考えられます。そしてカスタムテンプレートエンジンを使用します。

0
René

またはオプションでこれをカスタマイズするためにAdminimizeプラグインを使用する

0
bueltge