Wp_insert_post ile yayına sınıflandırma verileri ekleme


17

Birkaç açılan seçim alanlarında taksonomi verilerini gösteren bir ön uç gönderme sistemi uygulamaya çalışıyorum. Dropdowns Her "adı" kullanılarak adlandırılmıştır $argiçinde wp_dropdown_categories().

wp_dropdown_categories( array(
    'taxonomy'      => 'location',
    'hide_empty'    => 0,
    'orderby'       => 'name',
    'order'         => 'ASC',
    'name'          => 'location',
) );

Gördüğünüz gibi sınıflandırma "konum" ve seçim adı da "konum" dur.

Sonra post_title, post_content vb ile birlikte taksonomi seçin açılır listelerinin her biri için değişkenler ekleyin:

$title          = trim( $_POST['wpuf_post_title'] );
$content        = trim( $_POST['wpuf_post_content'] );
$tags           = wpuf_clean_tags( $_POST['wpuf_post_tags'] );
$customcategory = trim( $_POST['customcategory'] );
$cat            = trim( $_POST['cat'] );
$location       = trim( $_POST['location'] );
$sale_rental    = trim( $_POST['sale_rental'] );
$price          = trim( $_POST['price'] );

Son olarak gönderilmeye hazır bir dizi içine ekstra bilgi eklemek wp_insert_post(). Yapmam tax_inputgereken kodeksinden anladığım gibi aşağıdaki gibi diziye ekleyerek doğru şeyi yapıyorum olup olmadığını oldukça takılıp kaldım .

'tax-input' => array( 
    $location,
    $sale_rental,
    $price
),

Böylece her şey şöyle görünür:

$my_post = array(
    'post_title'    => $title,
    'post_content'  => $content,
    'post_status'   => $post_status,
    'post_author'   => $userdata->ID,
    'post_category' => array( $_POST['cat'] ),
    'post_type'     => $customcategory,
    'tags_input'    => $tags,
    'tax_input'     => array( 
        $location,
        $sale_rental,
        $price
    ),
);

$post_id = wp_insert_post( $my_post );

Ancak, yeni gönderiyi gönderdiğimde, tüm standart gönderi verileri (ve ayrıca benim özel gönderi türüm) iyi gidiyor ancak sınıflandırılmıyor. Açıkçası yanlış bir şey yapıyorum ama ne?

Yanıtlar:


25

wp_set_object_termsHer sınıflandırma için posta kimliğine sahip olduktan sonra kullanın :

...
$post_id = wp_insert_post( $my_post );
wp_set_object_terms( $post_id, $location, 'location' );
wp_set_object_terms( $post_id, $sale_rental, 'sale_rental' );
wp_set_object_terms( $post_id, $price, 'price' );

Senin yardımın olmadan nerede olacağımı bilmiyorum, ilk kez çalıştım ... çok teşekkürler Bainternet.
Cevaplandı

Sevindim yardımcı olabilir :)
Bainternet

$ Location ve $ sale_rental dizileri tamsayıların mı yoksa dizelerin mi?
Doug

5

Bunu wp_insert_post kullanarak yapabilirsiniz , ancak sınıflandırmada da belirtmeniz gerekir tax_input, bu yüzden şöyle görünmelidir:

$item['tax_input'] = array (
    'location'      => implode( ',', $location ),
    'sale_rental'   => implode( ',', $sale_rental ),
    'price'         => implode( ',', $price ),
)

Birden çok terime sahip bir dizi olabilir implode()böylece kullanın $location.

Ayrıca, bunun yalnızca hiyerarşik olmayan sınıflandırmalar için geçerli olduğuna dikkat edin. Hiyerarşik sınıflandırmalar için, büzülmek yerine bir dizi sağlamalısınız.


2

Sorunun kaynağı

Bu konuyla ilgili biraz araştırma yaptıktan sonra, iç kısımları kontrol etmem söylendi (ki ben yaptım). Harici bir feed'deki gönderileri özel gönderi türü olarak içe aktarırken, kullanıcıyı basitçe -1(bot kullanıcısı eklemek yerine) olarak ayarladım . Karşılaştığım sorun wp_insert_post(), bir tax_inputküme ile dahili olarak mevcut olmayan bir kullanıcının sahip olmadığı bir kullanıcı kabiliyetini denetlerdi.

Kurtarma için SysBot

O zaman çözüm, SysBot eklentisini yazmamdı . Bu şekilde SysBot kullanıcısını ( editör rolüne sahip ) yeni oluşturulan gönderiye ekleyebilirdim ve her şey beklendiği gibi çalıştı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.