2016-09-19 8 views
1

на этот раз я бы добавил wordpress meta_box, вызвав wp_ajax.Wordpress Meta box с ajax

Я пробовал это, но не работает.

add_action('add_meta_boxes', 'add_custom_meta_box', 'post_type'); 

    function add_custom_meta_box($post_type) { 
     if ($post_type == 'minisites') { 
      add_meta_box('sections_meta_box', 'Add Section', 'show_custom_meta_box'); 
    //  echo Utils::createStructureBox(); 
     } 
     if ($post_type == 'sections') { 
      add_meta_box('sections_structure_box', 'Section Structure', 'show_section_structure_box'); 
     } 

    } 

    function show_custom_meta_box() { 
     echo Utils::createSelect(); 
     echo Utils::includeScripts(); 
    } 

    function show_section_structure_box() { 
     echo "Done"; 
    } 

    add_action('wp_ajax_addStructureBox', 'addStructureBox'); 

    function addStructureBox() { 
     add_custom_meta_box('sections'); 
    } 

и JQuery

$(document).ready(function() { 
    $('.addSection').on('click', function() { 
     var selectedSection = $('#sections option:selected').text(); 
     $.post(ajaxurl, {action: 'addStructureBox', section: selectedSection}, function (data) { 
      alert(data); 
     }); 
    }); 
}); 

, кажется, хорошо, но называют add_custom_meta_box в addStructureBox не работает, по-видимому.

Значит, любые идеи?

Заранее спасибо

Джузеппе

Edit: HTML код

public static function createSelect() { 
    $sections = get_posts(array(
     'post_type' => 'sections') 
    ); 
    $html = '<select id="sections" name="item[]">'; 
    foreach ($sections as $section) { 
     $html .= '<option value="' . $section->ID . '">' . $section->post_title . '</option>'; 
    } 
    $html .= '</select><br><br>'; 
    $html .= '<input type="button" class="button button-primary button-large addSection" id="add" value="Add"></button>'; 
    return $html; 
} 

Edit: Скриншот

enter image description here

+0

Почему вы хотите обмен веществ через ajax? – madalinivascu

+0

Мне нужно добавить мета-ящик, когда я нажимаю кнопку добавления раздела из первого мета-поля –

+0

, почему бы не загружать мета-окно? – madalinivascu

ответ

1

Пользовательские Аякса мета коробки с помощью Ajax можно сделать с помощью ниже метод.

//Add default meta box 
add_action('add_meta_boxes_{post_type}', 'add_custom_meta_box_post'); 
function add_custom_meta_box_{post_type}($post) {  
    add_meta_box('sections_meta_box', 'Add Section', 'show_custom_meta_box');   
} 


function show_custom_meta_box() { 
    //In your case you can use your html::functions 
    //Your html for select box 
    $sections = array('section1','section2'); 
    $html = '<select id="sections" name="item[]">'; 
    foreach ($sections as $key=>$section) { 
     $html .= '<option value="' . $key . '">' . $section . '</option>'; 
    } 
    $html .= '</select><br><br>'; 
    $html .= '<input class="addSection" type="button" value="Add Section">' ; 
    echo $html; 
} 

//Our custom meta box will be loaded on ajax 
function add_custom_meta_box($post_name){ 
     echo '<div id="sections_structure_box" class="postbox "> 
     <div class="handlediv" title="Click to toggle"><br></div><h3 class="hndle ui-sortable-handle"><span>Section Structure</span></h3> 
     <div class="inside"> 
      Done 
     </div>'; 
} 

//Call ajax 
add_action('wp_ajax_addStructureBox', 'addStructureBox'); 
//add_action('wp_ajax_noprev_addStructureBox', 'addStructureBox'); 
function addStructureBox() {  
    add_custom_meta_box($_POST['section']); 
    exit; 
} 

//In your case you can add script in your style 
//Add script 
add_action('admin_head','ajax_script'); 
function ajax_script(){ ?> 
    <script> 
    jQuery(document).ready(function ($) { 
     $('.addSection').on('click', function() { 
      var selectedSection = $('#sections option:selected').text(); 
      $.post(ajaxurl, {action: 'addStructureBox', section: selectedSection}, function (data) { 
       $('#sections_meta_box').parent().append(data); 
      }); 
     }); 
    }); 
    </script> 
<?php 
} 
+0

Спасибо @SCC. –

+0

Почему вы разрешаете ajax для пользователей, не вошедших в систему? – madalinivascu

+0

Спасибо, что напомнил мне, я редактировал. – SCC

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