Я использую сменное Сообщение от сайта, который настраивает устройство записи фронтэнда WP. Я изменил некоторую строку кода, потому что я должен выбрать категории с флажками, а не с несколькими выбирают (как это было первоначально в плагине). К сожалению, это не работает: существует флажок в устройстве записи фронтэнда, теперь, но устанавливающий флажки просто ничего не делает: сообщение сохраняется без категорий.
Вот код, который обрабатывает выбор таксономии:
public function get_taxonomy_list( $taxonomy ){
$terms = get_terms($taxonomy, array(
'hide_empty' => 0
));
if (!$terms || empty($terms)) return '';
//preg_match_all('/\s*<input class="(\S*)" value="(\S*)" type="checkbox">(.*)<\/input>\s*/', $terms, $matches, PREG_SET_ORDER);
$out = apply_filters( 'pfs_taxonomy_label', "<label for='terms_$taxonomy'>Seleziona i corsi</label>", $taxonomy );
foreach ($terms as $term){
if (is_taxonomy_hierarchical($taxonomy))
$out .= "<input class='{$term->term_taxonomy_id}' type='checkbox' value='{$term->term_taxonomy_id}' name='{$term->term_taxonomy_id}' /> {$term->name}<br />";
else
$out .= "<input class='{$term->term_taxonomy_id}' type='checkbox' value='{$term->name}' name='{$term->name}' /> {$term->name}";
}
$out .= "<br />\n";
return apply_filters("pfs_{$taxonomy}_list",$out);
}
и вот код, который сохраняет сообщение и таксономию (который я не изменил):
$postarr['tax_input'] = (array_key_exists('terms',$pfs_data)) ? $pfs_data['terms'] : array();
$post_id = wp_insert_post($postarr);
Вы изменили значение атрибута имени флажка. Необходимо использовать то же значение имени: условия [$taxonomy] []
Это должно исправить код:
if (is_taxonomy_hierarchical($taxonomy))
//$out .= "<input class='{$term->term_taxonomy_id}' type='checkbox' value='{$term->term_taxonomy_id}' name='{$term->term_taxonomy_id}' /> {$term->name}<br />";
$out .= "<input class='{$term->term_taxonomy_id}' type='checkbox' value='{$term->term_taxonomy_id}' name='terms[{$taxonomy}][]' /> {$term->name}<br />";
else
// $out .= "<input class='{$term->term_taxonomy_id}' type='checkbox' value='{$term->name}' name='{$term->name}' /> {$term->name}";
$out .= "<input class='{$term->term_taxonomy_id}' type='checkbox' value='{$term->name}' name='terms[{$taxonomy}][]' /> {$term->name}";
}
Я обычно использую http://codex.wordpress.org/Function_Reference/wp_set_post_terms
при установке taxonomies на создании сообщения.
$post_id = wp_insert_post();
if($post_id){
wp_set_post_terms($post_id, $postarr['tax_input'], 'category' );
}