Cum să modifici prioritatea editorului principal în WordPress

23 mai 2013, 18:45:27
Vizualizări: 1.48K
Voturi: 2

Vreau ca editorul principal de postări WordPress să apară sub unele dintre casetele mele meta (generate de Advanced Custom Fields).

Știu că există funcțiile add_meta_box() și remove_meta_box(), dar ar fi minunat dacă aș putea modifica pur și simplu prioritatea casetei meta a editorului fără a fi nevoie să o elimin și să o adaug din nou.

Idei?

0
Toate răspunsurile la întrebare 2
2

Editorul este hard-codat în formular. Nu este inserat prin add_meta_box.

Există un hook numit edit_form_after_title pe care ar trebui să îl poți folosi.

Dovadă de concept:

// folosește acțiunea pentru a crea un loc pentru meta box-ul tău
function add_before_editor($post) {
  global $post;
  do_meta_boxes('post', 'pre_editor', $post);
}
add_action('edit_form_after_title','add_before_editor');

// adaugă un box în locația creată
function test_box() {
    add_meta_box(
        'generic_box', // id, folosit ca atribut html id
        __( 'Titlu Generic' ), // titlul meta box-ului
        'generic_cb', // funcția callback, afișează conținutul
        'post', // tipul de postare sau pagină. Se adaugă doar la postări
        'pre_editor', // context, unde pe ecran
        'low' // prioritate, unde ar trebui să fie plasat în context
    );
}
function generic_cb($post) {
  var_dump($post);
  echo 'conținut generic';
}
add_action( 'add_meta_boxes', 'test_box' );
23 mai 2013 19:06:07
Comentarii

Mulțumesc @s_ha_dum, o să verific asta și revin cu un răspuns :-)

Ben Everard Ben Everard
24 mai 2013 10:33:36

deci asta ar funcționa perfect dacă aș folosi propriile mele cutii meta personalizate, însă eu folosesc Advanced Custom Fields, care nu are o opțiune de a muta caseta editorului în altă parte. Sunt pe punctul de a posta propriul meu răspuns la această întrebare, răspunsul tău m-a ajutat să ajung acolo :-)

Ben Everard Ben Everard
28 mai 2013 15:57:17
4

Pentru a răspunde la propria mea întrebare, voi explica mai întâi de ce răspunsul lui @s_ha_dum nu funcționează pentru mine.

Folosesc Advanced Custom Fields pentru a adăuga cutii meta suplimentare, cele pe care am nevoie să apară deasupra editorului WordPress.

@s_ha_dum a menționat că editorul WordPress este hardcodat în template, dar am observat că poate fi dezactivat prin eliminarea suportului pentru editor. Cu aceasta în minte, am dezactivat suportul pentru editor, apoi am adăugat codul pentru editor într-o nouă cutie meta.

Și iată:

add_action('init', function () {
    remove_post_type_support('post', 'editor');
});

add_action('add_meta_boxes', function () {

    $screens = array('post');

    foreach ($screens as $screen) {

        add_meta_box(
            'moved_editor',
            'Editor Mutat',
            'moved_editor_custom_box',
            $screen
        );

    }

});

function moved_editor_custom_box( $post ) {

    // Folosește nonce pentru verificare
    wp_nonce_field( plugin_basename( __FILE__ ), 'myplugin_noncename' );

    ?>

        <style>

            #moved_editor {
                border: none;
            }

            #moved_editor h3 {
                display: none;
            }

            #moved_editor .inside {
                padding: 0;
            }

        </style>

        <div id="postdivrich" class="postarea">

            <?php wp_editor($post->post_content, 'content', array('dfw' => true, 'tabfocus_elements' => 'sample-permalink,post-preview', 'editor_height' => 360) ); ?>

            <table id="post-status-info" cellspacing="0">

                <tbody>

                    <tr>

                        <td id="wp-word-count"><?php printf( __( 'Număr de cuvinte: %s' ), '<span class="word-count">0</span>' ); ?></td>
                        <td class="autosave-info">

                            <span class="autosave-message">&nbsp;</span>

                                <?php if ( 'auto-draft' != $post->post_status ) : ?>

                                    <span id="last-edit">'

                                        <?php if ( $last_id = get_post_meta($post_ID, '_edit_last', true) ) : ?>

                                            <?php

                                                $last_user = get_userdata($last_id); 
                                                printf(__('Ultima editare de %1$s pe %2$s la %3$s'), esc_html( $last_user->display_name ), mysql2date(get_option('date_format'), $post->post_modified), mysql2date(get_option('time_format'), $post->post_modified));

                                            ?>

                                        <?php else : ?>

                                            <?php printf(__('Ultima editare pe %1$s la %2$s'), mysql2date(get_option('date_format'), $post->post_modified), mysql2date(get_option('time_format'), $post->post_modified)); ?>

                                        <?php endif; ?>

                                    </span>

                                <?php endif; ?>

                            </td>

                        </tr>

                </tbody>

            </table>

        </div>

    <?php
}
28 mai 2013 16:04:00
Comentarii

Aș urmări acest lucru cu atenție. Pot exista alte consecințe la eliminarea suportului pentru editor. Niciodată nu am încercat să îl elimin și apoi să îl folosesc în altă cutie.

s_ha_dum s_ha_dum
28 mai 2013 16:05:39

Da, aceasta a fost o preocupare pe care am încercat să o ocolesc de la început, totuși se pare că încă salvează și afișează conținutul... nu sunt sigur cu ce altceva ar putea cauza probleme.

Ben Everard Ben Everard
28 mai 2013 16:07:22

"...cu ce altceva ar putea cauza probleme..." - Nici eu nu sunt sigur, dar este posibil să creeze o problemă undeva. Ar trebui să cercetez în profunzime Core-ul și să văd ce efecte are această setare. Doar o poveste de precauție, atât.

s_ha_dum s_ha_dum
28 mai 2013 16:15:37

S-ar putea să fac asta... nu vreau să complic lucrurile. Mulțumesc mult, foarte util :-)

Ben Everard Ben Everard
28 mai 2013 16:26:35