web-dev-qa-db-fra.com

Ajouter une option personnalisée à la boîte méta Attributs de page standard

J'aimerais ajouter une simple option de case à cocher à la boîte à méta Attributs de page standard existante.

Existe-t-il un moyen évident/prévu de faire cela en utilisant l'API WordPress, au lieu d'enregistrer une nouvelle métabox pour ma seule nouvelle option?

3
mikkelbreum

Malheureusement non. Le seul moyen est de désenregistrer la métabox, puis de la réenregistrer, en fournissant votre propre fonction de rappel qui imite la métabox d'origine, mais avec vos modifications (en vous assurant que les noms des entrées ne changent pas).

Cette méthode est décrite dans ces messages:

Sinon, vous pouvez insérer les options avec javascript comme indiqué dans:

4
Stephen Harris

Stephen Harris a gentiment fait remarquer que j'avais mal interprété la question. Malheureusement, il n'y a pas d'action post_submitbox_publish_actions où nous pouvons nous accrocher.

Donc, pour que ma solution fonctionne, la solution consiste à faire en sorte que jQuery déplace la case à cocher de son emplacement d'origine. J'ai ajouté le script pour que cela se produise.

Ceci est une tentative sauvage complète de le faire, basée dans
- this Q & A: Comment déplacer l'auteur Metabox dans le "Publish" metabox?
- et le premier exemple du codex: http://codex.wordpress.org/Function_Reference/add_meta_box

J'exécute le code dans un plugin (wp-content/mu-plugins/tests.php) et je n'ai pas testé avec functions.php...

Je ne peux pas garantir qu'il s'agit d'un code "correct", mais cela fonctionne dans mon WordPress local.

add_action( 'post_submitbox_misc_actions', 'wpse_52193_custombox_in_publish' );
add_action( 'save_post', 'wpse_52193_save_postdata' );
add_action( 'admin_head', 'wpse_52193_script_enqueuer');

function wpse_52193_custombox_in_publish() {
    global $post;
    if ('page' != get_post_type($post)) return;

    wp_nonce_field( plugin_basename( __FILE__ ), 'myplugin_noncename' );
    $checked = (get_post_meta($post->ID, 'myplugin_new_field',true)) ? 'checked="yes"' : '';

    echo '<div id="myplugin_new_field_div" class="misc-pub-section" style="border-top-style:solid; border-top-width:1px; border-top-color:#EEEEEE; border-bottom-width:0px;"><div style="font-weight: bold;">Description for this field:</div>';
    echo '<input name="myplugin_new_field" id="myplugin_new_field" type="checkbox" '.$checked.'>';
    echo '</div>';
}

function wpse_52193_save_postdata( $post_id ) {
    if ( 'page' != $_POST['post_type'] )
          return;

    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
        return;

    if ( !wp_verify_nonce( $_POST['myplugin_noncename'], plugin_basename( __FILE__ ) ) )
        return;

    $mydata = $_POST['myplugin_new_field'];
    update_post_meta($post_id, 'myplugin_new_field', $mydata);
}

function wpse_52193_script_enqueuer(){
    global $current_screen;
    if('page' != $current_screen->id) return;

    echo '<script type="text/javascript">
        jQuery(document).ready( function($) { 
            $("#myplugin_new_field_div").appendTo("#pageparentdiv"); 
         });
        </script>'; 
}
1
brasofilo

le site ici a beaucoup de questions pour cela, comme ceci search , aussi un google search

aussi un exemple de travail ( git rebo ), que vous pouvez utiliser et modifier pour vos besoins

0
bueltge