Как я могу отфильтровать сообщение CPT по таксономии Термин в раскрывающемся списке мета-ящиков администратора?

Я искал отчаянно, пытаясь найти решение для этого. Я пытаюсь создать два раскрывающихся поля в одной стороне Meta Box.

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

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

Например,

Скажем, у меня есть таксономия «тип собственности», а термины «плоский» или «дом» и 3 должности связаны с «домами» и 7 с «плоскими». Как я могу получить двойной выпадающий список, в котором вы выбираете «flat» (или «House»), и из них связанные записи появляются в следующем раскрывающемся списке?

Solutions Collecting From Web of "Как я могу отфильтровать сообщение CPT по таксономии Термин в раскрывающемся списке мета-ящиков администратора?"

Этот вопрос более сложный, чем вы понимаете.

Несмотря на это (или действительно, из-за этого), я собираюсь отдать ему все …

add_metabox('terms-post-selector','Select Related Post','post_terms_selector_dropdown',null,'post','side','high'); function post_terms_selector_dropdown() { global $post; $taxonomy = 'property_type'; // or whatever it is $terms = get_the_terms($postid,$taxonomy); $selectedterm = get_post_meta($post->ID,'_selected_term',true); if (count($terms) > 0) { echo "<select name='termselector' id='termselector' onchange='loadpostterms();'>"; foreach ($terms as $term) { echo "<option value='".$term->value."'"; if ($term->value == $selectedterm) {echo " selected='selected'";} echo ">".$term->name."</option>"; } echo "</select>"; echo "<div id='posttermselecter'></div>"; } // javascript to trigger the AJAX creation of post dropdown select element echo "<script>function loadpostterms() { var ajaxurl = '".admin_url('admin-ajax.php')."'; var termselector = document.getElementById('termselector'); var selectedterm = termsselector.options[termselector.selectedIndex].value; document.getElementByID('termqueryiframe').src = ajaxurl+'?action=post_terms_dropdown&term='+selectedterm+'&postid=".$post->ID."'; </script>"; // just a dummy iframe to handle the AJAX post selector callback echo "<iframe src='javascript:void(0);' id='termqueryiframe' style='display:none;'></iframe>"; } // AJAX callback to populate the post select element add_action('wp_ajax_post_terms_dropdown','post_terms_dropdown'); add_action('wp_ajax_nopriv_post_terms_dropdown','post_terms_dropdown'); function post_terms_dropdown() { // get all posts with specified term $term = $_GET['term']; $taxonomy = 'property_type'; // or whatever it is $args = array('tax_query' => array(array( 'taxonomy' => $taxonomy, 'field' => 'ID', 'terms' => $term ) ) ); $posts = get_posts($args); if (count($posts) > 0) { // get the currently selected post $postid = $_GET{'postid']; $selectedpost = get_post_meta($postid,'_selected_post',true); // create the post dropdown and send it back to parent frame echo "<script>var postselector = '<select name=\"posttermselector\">';"; foreach ($posts as $post) { echo "postselector += '<option value=\"".$post->ID."\""; if ($post->ID == $selectedpost) {echo " selected=\"selected\"";} echo ">".$vpost->post_title."</option>';"; } echo "postselector += '</select>'; parent.document.getElementById('posttermselector').innerHTML = postselector;</script>"; } exit; } // update the hidden post fields on post publish / save add_action('publish_post','select_post_terms_update'); add_action('save_post','select_post_terms_update'); function select_post_terms_update($postid) { if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {return;} if (!current_user_can('edit_post',$postid)) {return;} if (isset($_POST['termselector'])) { update_post_meta($postid,'_selected_term',$_POST['termselector']); } if (isset($_POST['posttermselector'])) { update_post_meta($postid,'_selected_post',$_POST['posttermselector']); } } 

Обратите внимание, что не политика этой сети побуждает других «выполнять вашу работу за вас», как я в основном сделал здесь, – я просто искал что-то интересное, и вопрос задают хорошо. Удачи, надеюсь, это сработает для вас! (Никакая гарантия не написана с нуля, как это.)