Adición de Metaboxes, ¿cuánto código hay una forma SECA más corta?

2

Agregué los siguientes dos metaboxes a mi archivo functions.php y funciona, pero es mucho código.

Pregunta: ¿Existe una forma más breve o sencilla de hacerlo sin un complemento?

/***AddcustomfieldstoaspecificWPpagetemplate&saveit*/$post_id=$_GET['post']?$_GET['post']:$_POST['post_ID'];$template_file=get_post_meta($post_id,'_wp_page_template',TRUE);//checkforatemplatetypeif($template_file=='template-testhome.php'){//thisisthetemplatechangeonrealsite//addtheactionstoaddfunctions::howmanyslidestoshowadd_action('admin_menu','slidestoshow_create_post_meta_box');add_action('save_post','slidestoshow_save_post_meta_box',10,2);//addtheactionstoaddfunctions::typeofsliderinfiniteornotadd_action('admin_menu','slidetype_create_post_meta_box');add_action('save_post','slidetype_save_post_meta_box',10,2);//beginslidestoshowmetaboxfunctionslidestoshow_create_post_meta_box(){add_meta_box('slidestoshow_meta_box','SlidestoShow&Scroll(1-6)','slidestoshow_page_meta_box','page','normal','high');}functionslidestoshow_page_meta_box($object,$box){?><p><labelfor="slides-to-show-scroll">Slides to Show & Scroll (1-6)</label>
        <!-- keep reference
        <textarea name="second-excerpt" id="second-excerpt" cols="60" rows="4" tabindex="30" style="width: 97%;"><?php echo wp_specialchars( get_post_meta( $object->ID, 'Second Excerpt', true ), 1 ); ?></textarea>
        -->
       <input type="text" id="slides-to-show-scroll" name="slides-to-show-scroll" value="<?php echo wp_specialchars( get_post_meta( $object->ID, 'Slides to Show Scroll', true ), 1 ); ?>" size="10" />
       <input type="hidden" name="slidestoshow_page_meta_box_nonce" value="<?php echo wp_create_nonce( plugin_basename( __FILE__ ) ); ?>" />
    </p>
<?php }
// end create the meta box for slides to show


//begin slide type meta box
function slidetype_create_post_meta_box() {
    add_meta_box( 'slidetype_meta_box', 'Infinte (true or false)', 'slidetype_page_meta_box', 'page', 'normal', 'high' );
}

function slidetype_page_meta_box( $object, $box ) { ?>
    <p>
        <label for="slide-type">Infinite (true or false)</label>
       <input type="text" id="slide-type" name="slide-type" value="<?php echo wp_specialchars( get_post_meta( $object->ID, 'Slide Type', true ), 1 ); ?>" size="10" />
       <input type="hidden" name="slidetype_page_meta_box_nonce" value="<?php echo wp_create_nonce( plugin_basename( __FILE__ ) ); ?>" />
    </p>
<?php }
// end create the meta box for slides type


function slidestoshow_save_post_meta_box( $post_id, $post ) {

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

    if ( !current_user_can( 'edit_post', $post_id ) )
        return $post_id;

    $meta_value = get_post_meta( $post_id, 'Slides to Show Scroll', true );
    $new_meta_value = stripslashes( $_POST['slides-to-show-scroll'] );

    if ( $new_meta_value && '' == $meta_value )
        add_post_meta( $post_id, 'Slides to Show Scroll', $new_meta_value, true );

    elseif ( $new_meta_value != $meta_value )
        update_post_meta( $post_id, 'Slides to Show Scroll', $new_meta_value );

    elseif ( '' == $new_meta_value && $meta_value )
        delete_post_meta( $post_id, 'Slides to Show Scroll', $meta_value );
}
//end the save for slides to show



function slidetype_save_post_meta_box( $post_id, $post ) {

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

    if ( !current_user_can( 'edit_post', $post_id ) )
        return $post_id;

    $meta_value = get_post_meta( $post_id, 'Slide Type', true );
    $new_meta_value = stripslashes( $_POST['slide-type'] );

    if ( $new_meta_value && '' == $meta_value )
        add_post_meta( $post_id, 'Slide Type', $new_meta_value, true );

    elseif ( $new_meta_value != $meta_value )
        update_post_meta( $post_id, 'Slide Type', $new_meta_value );

    elseif ( '' == $new_meta_value && $meta_value )
        delete_post_meta( $post_id, 'Slide Type', $meta_value );
}
//end the save for slide type
    
pregunta Christina 17.10.2015 - 13:14

1 respuesta

4

Funciones de apalancamiento

Puede extraer el código redundante en funciones reutilizables. Por ejemplo, las dos últimas funciones podrían reescribirse así. Mi código resultante es en realidad 2 líneas más, pero es mucho más limpio desde el punto de vista de la depuración. Y, si hubiera un tercer campo personalizado, este enfoque definitivamente sería más corto.

function slidestoshow_save_post_meta_box( $post_id, $post ) {

    $nonce = 'slidestoshow_page_meta_box_nonce';
    $meta_label = 'Slides to Show Scroll';
    $meta_slug = 'slides-to-show-scroll';

    if ( !my_save_post_met_box( $post_id, $post, $meta_label, $meta_slug, $nonce ) ) {
        return $post_id;
    }
}

function slidetype_save_post_meta_box( $post_id, $post ) {

    $nonce = 'slidetype_page_meta_box_nonce';
    $meta_label = 'Slide Type';
    $meta_slug = 'slide-type';

    if ( !my_save_post_met_box( $post_id, $post, $meta_label, $meta_slug, $nonce ) ) {
        return $post_id;
    }
}

function my_save_post_meta_box( $post_id, $post, $meta_label, $meta_slug, $nonce ) {

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

    if ( !current_user_can( 'edit_post', $post_id ) )
        return;

    $meta_value = get_post_meta( $post_id, $meta_label, true );
    $new_meta_value = stripslashes( $_POST[$meta_slug] );

    if ( $new_meta_value && '' == $meta_value )
        add_post_meta( $post_id, $meta_label, $new_meta_value, true );

    elseif ( $new_meta_value != $meta_value )
        update_post_meta( $post_id, $meta_label, $new_meta_value );

    elseif ( '' == $new_meta_value && $meta_value )
        delete_post_meta( $post_id, $meta_label, $meta_value );
}

Y, puedes reclamar tus dos líneas cambiando el nombre de tu nonce al mismo esquema que tu babosa. Algo como esto:

if ( !wp_verify_nonce( $_POST[$meta_slug . '_page_meta_box_nonce'], plugin_basename( __FILE__ ) ) )

Utilice matrices y bucles Foreach

Tus ganchos de acción podrían optimizarse así. Nuevamente, hay más líneas de código, con solo dos campos personalizados, pero más fáciles de leer y depurar.

$fnc_labels = array( 'slidestoshow', 'slidetype' );

foreach ( $fnc_labels AS $fnc_label ) {
    add_action( 'admin_menu', $fnc_label . '_create_post_meta_box' );
    add_action( 'save_post', $fnc_label . '_save_post_meta_box', 10, 2 );
}
    
respondido por el Landing on Jupiter 17.10.2015 - 14:28

Lea otras preguntas en las etiquetas