Функция для создания нескольких метабоксов в WordPress - PullRequest
1 голос
/ 13 апреля 2020

Я успешно смог создать один настраиваемый метабокс для типов записей WordPress, используя следующий код:

function bandcamp_metabox(){
$posttypes = Array(
    'discos',
    'Projetos'
);
add_meta_box('bandcamp_link', 'bandcamp link', 'bandcamp_link_meta_callback', $posttypes, 'side');
}

function bandcamp_link_meta_callback( $post ) {
wp_nonce_field('save_bandcamp_link', 'bancamp_meta_box_nonce');

$value = get_post_meta($post->ID,'_bandcamp_link_value_key', true);

echo '<label for="bancamp_link_field">';
echo '<input type="url" id="bancamp_link_field" name="bancamp_link_field" value="' . esc_attr ( $value ) . '" size="25" />';
}

function save_bandcamp_link ( $post_id ) {

if( ! isset( $_POST['bancamp_meta_box_nonce'] ) ){
    return;
}
if ( ! wp_verify_nonce( $_POST['bancamp_meta_box_nonce'], 'save_bandcamp_link' ) ){
    return;
}
if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE){
    return;
}
if( ! current_user_can( 'edit_post', $post_id ) ){
    return;
}

if( ! isset( $_POST['bancamp_link_field'] ) ) {
    return;
}

$bandcamp_link =  sanitize_text_field( $_POST['bancamp_link_field'] );

update_post_meta($post_id, '_bandcamp_link_value_key', $bandcamp_link);
}

add_action('add_meta_boxes', 'bandcamp_metabox');

add_action('save_post', 'save_bandcamp_link');

Я надеялся (все еще разновидность нуба), что с помощью функции 'foreach' я Я смог бы повторно использовать код для одновременного создания нескольких метабоксов, например:

$varsocial = Array(
'bandcamp',
'soundcloud',
'facebook',
'instagram',);

foreach($varsocial as $sociallink) {

function social_metabox(){
$posttypes = Array(
    'discos',
    'Projetos');

add_meta_box(''. $sociallink .'_link', ''. $sociallink .' link', 'social_link_meta_callback', $posttypes, 'side');
}

function social_link_meta_callback( $post ) {
wp_nonce_field('save_social_link', 'social_meta_box_nonce');

$value = get_post_meta($post->ID,'_'. $sociallink .'_link_value_key', true);

echo '<label for="'. $sociallink .'_link_field">';
echo '<input type="url" id="'. $sociallink .'_link_field" name="'. $sociallink .'_link_field" value="' . esc_attr ( $value ) . '" size="25" />';
}

function save_social_link ( $post_id ) {

if( ! isset( $_POST['social_meta_box_nonce'] ) ){
    return;
}
if ( ! wp_verify_nonce( $_POST['social_meta_box_nonce'], 'save_social_link' ) ){
    return;
}
if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE){
    return;
}
if( ! current_user_can( 'edit_post', $post_id ) ){
    return;
}

if( ! isset( $_POST[''. $sociallink .'_link_field'] ) ) {
    return;
}

$social_link =  sanitize_text_field( $_POST[''. $sociallink .'_link_field'] );

update_post_meta($post_id, '_'. $sociallink .'_link_value_key', $social_link);}

return add_action('add_meta_boxes', 'social_metabox');
return add_action('save_post', 'save_social_link');
}

Но такое не работает. Что я делаю не так?

...