Crie mais Meta Boxes conforme necessário

44

Eu gostaria que os usuários pudessem criar e remover campos adicionais da caixa meta conforme necessário.

Por exemplo, digamos um podcast de música com uma quantidade variável de músicas reproduzidas por episódio. O usuário deve poder clicar em um botão que adicionará campos adicionais para inserir cada música conforme necessário.

Idealmente, isso seria feito sem o uso de um plugin, mas codificado no arquivo de funções.

    
por Picard102 13.06.2011 / 01:22
fonte

2 respostas

52

Então você quer dizer algo assim?

equandovocêclicaemAdicionarfaixas,issosetornaisso:

se é o que você quer dizer com a criação de um metabox que tem a função jquery simples para adicionar e remover campos, e os dados são salvos como uma matriz de dados em uma única meta-linha, aqui você vai:

  add_action( 'add_meta_boxes', 'dynamic_add_custom_box' );

    /* Do something with the data entered */
    add_action( 'save_post', 'dynamic_save_postdata' );

    /* Adds a box to the main column on the Post and Page edit screens */
    function dynamic_add_custom_box() {
        add_meta_box(
            'dynamic_sectionid',
            __( 'My Tracks', 'myplugin_textdomain' ),
            'dynamic_inner_custom_box',
            'post');
    }

    /* Prints the box content */
    function dynamic_inner_custom_box() {
        global $post;
        // Use nonce for verification
        wp_nonce_field( plugin_basename( __FILE__ ), 'dynamicMeta_noncename' );
        ?>
        <div id="meta_inner">
        <?php

        //get the saved meta as an array
        $songs = get_post_meta($post->ID,'songs',false);

        $c = 0;
        if ( count( $songs ) > 0 ) {
            foreach( $songs as $track ) {
                if ( isset( $track['title'] ) || isset( $track['track'] ) ) {
                    printf( '<p>Song Title <input type="text" name="songs[%1$s][title]" value="%2$s" /> -- Track number : <input type="text" name="songs[%1$s][track]" value="%3$s" /><span class="remove">%4$s</span></p>', $c, $track['title'], $track['track'], __( 'Remove Track' ) );
                    $c = $c +1;
                }
            }
        }

        ?>
    <span id="here"></span>
    <span class="add"><?php _e('Add Tracks'); ?></span>
    <script>
        var $ =jQuery.noConflict();
        $(document).ready(function() {
            var count = <?php echo $c; ?>;
            $(".add").click(function() {
                count = count + 1;

                $('#here').append('<p> Song Title <input type="text" name="songs['+count+'][title]" value="" /> -- Track number : <input type="text" name="songs['+count+'][track]" value="" /><span class="remove">Remove Track</span></p>' );
                return false;
            });
// The live() method was deprecated in jQuery version 1.7, and removed in version 1.9. Use the on() method instead. We can use .on
            $(".remove").live('click', function() {
                $(this).parent().remove();
            });
        });
        </script>
    </div><?php

    }

    /* When the post is saved, saves our custom data */
    function dynamic_save_postdata( $post_id ) {
        // verify if this is an auto save routine. 
        // If it is our form has not been submitted, so we dont want to do anything
        if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
            return;

        // verify this came from the our screen and with proper authorization,
        // because save_post can be triggered at other times
        if ( !isset( $_POST['dynamicMeta_noncename'] ) )
            return;

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

        // OK, we're authenticated: we need to find and save the data

        $songs = $_POST['songs'];

        update_post_meta($post_id,'songs',$songs);
    }
    
por Bainternet 13.06.2011 / 09:41
fonte
3

Isso é feito através de campos personalizados, MAS você nunca deve usar nada que permita aos usuários adicionar criar ou remover caixas meta. Eles escrevem diretamente no banco de dados para que você possa criar um monte de problemas para o seu site, se você fornecer aos usuários esse tipo de controle. É muito mais seguro criar o número máximo de campos personalizados que eles podem precisar e deixá-los deixar um espaço em branco onde não são necessários.

Este também é o território do plug-in. O arquivo de funções é específico do tema, enquanto os plug-ins são para funções que se aplicam ao conteúdo do site, especialmente se você quiser que o conteúdo esteja disponível, independentemente de qual tema você usa.

Algumas sugestões:

enlace

enlace

    
por Elpie 13.06.2011 / 02:20
fonte

Tags