2016-09-19 34 views
1

的WordPress元框meta_box調用wp_ajax。這個時候,我想補充一個WordPress 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); 
     }); 
    }); 
}); 

似乎不錯,但在addStructureBox調用add_custom_meta_box不工作顯然。

那麼有什麼想法?

在此先感謝

朱塞佩

編輯: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; 
} 

編輯:截圖

enter image description here

+0

爲什麼你要通過AJAX metabox? – madalinivascu

+0

我需要添加一個元框當我點擊添加部分按鈕從第一個元框 –

+0

爲什麼不預先加載元框? – madalinivascu

回答

1

自定義AJAX元用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