2014-01-09 4 views
2

Я пытаюсь создать мета-окно для темы Wordpress, где я могу добавить страны. Каждая страна имеет набор полей, таких как имя, население, флаг (изображение). Мне удалось создать метабокс для страны SINGLE, используя этот учебник: http://wp.tutsplus.com/tutorials/three-practical-uses-for-custom-meta-boxes/. Любой из трех примеров работает, но можно ли добавить больше стран?wordpress create meta box с несколькими записями

ответ

3

Это отвечает о том, как сохранить многомерный массив значения, а некоторые, как решает проблему в каком-то уровне

Вы должны использовать массивы.

Я делаю это во многих реализациях в своих сценариях. Давайте посмотрим, как:

HTML/PHP Во-первых:

<?php 
    $countries = get_post_meta($post->ID, 'countries' true); 
?> 
<div class="EntriesContainer" data-count="<?php echo count($countries); ?>" id="itemsList"> 
    <?php 
     $cnt = 0; 

     foreach($countries as $country) 
     { 
      ++$cnt; 
    ?> 
    <div class="newItem"> 
     <input name="countries[<?php echo $cnt; ?>][name]" type="text" />' + 
     <input name="countries[<?php echo $cnt; ?>][population]" type="text" /> 
     <input name="countries[<?php echo $cnt; ?>][flag_url]" type="text" /> 
    </div> 
    <?php 
     } 
    ?> 
</div> 
<input type="button value="Add new Country" class="button" id="addNewItem" /> 

JavaScript:

jQuery(document).ready(
    function($) 
    { 
     $('#addNewItem').on(
      'click.myThemeOrPluginName', 
      function(e) 
      { 
       e.preventDefault(); 

       var ttlItems = parseInt($('#itemsList').attr('data-count')); 
       ++ttlItems; 

       var $newItem = '<div class="newItem>' + 
           '<input name="countries[' + ttlItems + '][name]" type="text" />' + 
           '<input name="countries[' + ttlItems + '][population]" type="text" />' + 
           '<input name="countries[' + ttlItems + '][flag_url]" type="text" />' + 
           '</div>'; 

       $('#itemsList').append($newItem); 
      } 
     ); 
    } 
); 

Тогда в save_post действия крючковатым функции вы получите через $_POST массив, который будет выглядеть например:

array(
    'countries' => array(
     [1] => array(
      name => 'Greece' 
      population => '11000000', 
      flag_url => '../el_GR.png' 
     ) 
     [2] => array(
      name => 'Italy' 
      population => '????', 
      flag_url => '../it_IT.png' 
     ) 
    ) 
) 

Это общая идея. Настройте на основе ваших требований :)

2

Вы должны учитывать индивидуальные типы сообщений (http://codex.wordpress.org/Post_Types).

В этом случае вы можете создать новый тип: страна, которая содержит заголовок сообщения (название страны), и вы могли бы добавить 2 настраиваемых поля: совокупность (текстовое поле) и флаг (поле изображения).

Тогда вы можете добавить столько стран, сколько хотите, так же как и сообщения.

+0

Это тоже хорошая практика! –

+0

Очень хороший совет! благодаря –

Смежные вопросы