web-dev-qa-db-ja.com

エディタの前にカスタムフィールドを配置する方法

Advanced Custom Fields 4.0.1をインストールし、preambleという名前の単一フィールドを含む新しいField groupを作成しました。投稿編集画面で、編集者の前にこの新しいフィールドを配置したいと思います。通常のフィールドを投稿した後にすべてのカスタムフィールドが常に追加されるようです。

解決策は、ACFで作成されたカスタムフィールドを削除して通常のカスタムフィールドを使用することではありません。

4
Cyclonecode

これは このNiceスニペットedit_form_after_titleフックを使って解決できます。しかし、私は複数のメタボックスが存在するときに何が起こるかをテストしていません。単一のACFフィールド(position:normal, style:no-metabox)でそれは機能します。

add_action( 'edit_form_after_title', 'pre_title_metabox_wpse_94530' );

function pre_title_metabox_wpse_94530() 
{
    global $post, $wp_meta_boxes;

    do_meta_boxes( get_current_screen(), 'normal', $post );

    unset( $wp_meta_boxes['post']['normal'] );
}

そしてそれがjQueryで解決されなければならないならば、あなたのフィールド名にsubtitle_textを調整してください:

// Add hook to Edit and New post
foreach( array( 'post.php', 'post-new.php' ) as $hook )
    add_action( "admin_footer-$hook", 'move_acf_to_title_wpse_94530' );

function move_acf_to_title_wpse_94530()
{
    // Check post type
    if( 'post' != get_post_type() )
        return;

    ?>
    <script type="text/javascript">
        jQuery(document).ready( function($) 
        {
            $( '#acf-field-subtitle_text' ).css( 'width', '100%' );
            $( '#acf-subtitle_text' ). insertAfter( '#titlewrap' );
        });
    </script>
    <?php
}
5
brasofilo

私はこれを少し調べました。 ACFソースを見ました。 ACFが使用するプレーンフィールドは、まだ実際にはメタボックスです。 ACFは、CSSを使用して、より一般的なフィールドのように見せかけるようにしています。それらはまだWP(do_metaboxes action)によってメタボックスとして扱われています。

プレーンフォームを編集フォームの他の部分に追加するには、適切なフックを使う必要があります。 編集画面にもっとフックがあります

add_action( 'edit_form_after_title', 'myprefix_edit_form_after_title' );
function myprefix_edit_form_after_title() {
    echo '<h2>This is edit_form_after_title!</h2>';
}

add_action( 'edit_form_after_editor', 'myprefix_edit_form_after_editor' );
function myprefix_edit_form_after_editor() {
    echo '<h2>This is edit_form_after_editor!</h2>';
}

add_action( 'edit_form_advanced', 'myprefix_edit_form_advanced' );
function myprefix_edit_form_advanced() {
    echo '<h2>This is ye olde edit_form_advanced!</h2>';
}
3
Dave Romsey