Здравствуйте!
Требуется помощь по вводу данных в произвольный тип записей с front-end.
Создал произвольный тип записей:
// Регистрируем собственный тип записей property
function post_type_property() {
register_post_type(
'property',
array('label' => __('Недвижимость'),
'public' => true,
'show_ui' => true,
'has_archive' => true,
'publicly_queryable' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'supports' => array('title', 'editor', 'thumbnail')
)
);
Создал произвольную таксономию для него:
// Регистрируем таксономию (город)
register_taxonomy( 'city', 'property',
array(
'hierarchical' => true,
'label' => __('Город'),
'query_var' => true,
/*'hierarchical' => false,*/
'rewrite' => array('slug' => 'city'),
'update_count_callback' => 'update_term_taxonomy'
)
);
// Объявляем собственный тип записей
add_action('init', 'post_type_property');
// Функция обновления количества записей в таксономиях
function update_term_taxonomy($term,$taxonomy) {
global $wpdb,$post;
//in quick edit mode, $post is an array()
//in full edit mode $post is an object
if ( is_array( $post ))
$posttype=$post['post_type'];
else
$posttype=$post->post_type;
if ($posttype) {
$DB_prefix=$wpdb->get_blog_prefix(BLOG_ID_CURRENT_SITE);
$sql = "UPDATE ".$DB_prefix."term_taxonomy tt
SET count =
(SELECT count(p.ID) FROM ".$DB_prefix."term_relationships tr
LEFT JOIN ".$DB_prefix."posts p
ON (p.ID = tr.object_id AND p.post_type = '".$posttype."' AND p.post_status = 'publish')
WHERE tr.term_taxonomy_id = tt.term_taxonomy_id)
WHERE tt.taxonomy = '".$taxonomy->name."'
";
$wpdb->query($sql);
}
}
В форме добавления записи с front-end (таксономия вводится из существующих значений путем выбора из dropdown) код добавления записи и таксономии:
if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == "add_property") {
if (isset ($_POST['title'])) {
$title = $_POST['title'];
} else {
echo 'Введите наименование';
}
if (isset ($_POST['description'])) {
$description = $_POST['description'];
} else {
echo 'Введите описание';
}
$city = $_POST['city'];
$new_post = array(
'post_title' => $title,
'post_content' => $description,
'post_type' => 'property',
'post_status' => 'pending',
'post_author' => 1
);
$pid = wp_insert_post($new_post);
wp_set_object_terms( $pid, array($city), 'city', true);
do_action('wp_insert_post', 'update_term_taxonomy');
$link = get_permalink( $pid );
wp_redirect( $link );
}
Все вводится, пост, название, таксономии... но вот у произвольных таксономий (которые были введены через админку) пропадает число записей, где эта таксономия есть.
Если новую запись, введенную через front-end опубликовать через админку, то число записей у таксономий восстанавливается, а до этого момента нет.
Понятно, что где-то нужно указать, чтобы при добавлении записи с front-end, обновлялись произвольные таксономии... но где и как, вторую ночь курю мануалы, не вижу, где ошибка или чего не хватает?
Подскажите, пожалуйста.
Спасибо.
Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
|