web-dev-qa-db-ja.com

カスタム投稿タイプが公開/ゴミ箱に入れられたときに分類法で用語を動的に作成/削除する

カスタム投稿タイプが公開およびゴミ箱に入れられたときに基づいて用語を作成および削除することに少し苦労しています。理想的には、カスタム投稿タイプが公開されたときに、カスタム分類法で新しい用語を作成したいと思います。次に、カスタム投稿タイプのその投稿がゴミ箱に捨てられたときに、その用語のカウントが0であることを確認して確認する必要があります。そうであれば、適切な用語を自動的に削除します。これが私のこれまでのところです。作成機能は正しく機能していますが、ごみ箱の機能がわかりません。あなたの専門知識は大歓迎です!

<?php
/**
  * Automatically creates terms in 'custom_taxonomy' when a new post is added to its 'custom_post_type'
  */
function add_cpt_term($post_ID) {
    $post = get_post($post_ID);

    if (!term_exists($post->post_name, 'custom_taxonomy'))
        wp_insert_term($post->post_title, 'custom_taxonomy', array('slug' => $post->post_name));
}
add_action('publish_{custom_post_type}', 'add_cpt_term');
?>

...そして今関数のために私はそれがしたい方法で動作するようになって苦労しています:

/**
  * Automatically removes term in 'custom_taxonomy' when the post of 'custom_post_type' is trashed
  */
function remove_cpt_term($post_ID) {
    $post = get_post($post_ID);
    $term = get_term_by('name', $post->post_name, 'custom_taxonomy', 'ARRAY_A');

    if ($post->post_type == 'custom_post_type' && $term['count'] == 0)
        wp_delete_term($term['term_id'], 'custom_taxonomy');
}
add_action('wp_trash_post', 'remove_cpt_term');
?>
1
kaffolder

わかりました、私は実行可能な解決策を考え出したと思います。 trash_{custom_post_type}フックを使用できるようになったので、publish_{custom_post_type}に直接フックする方法がこれまでにないことにKindaはがっかりしました。これは、この問題に苦しんでいる他の人のための解決策です。誰かより良い提案があれば、共有してください!

/**
  * Automatically removes term in 'custom_taxonomy' when the post of 'custom_post_type' is trashed
  */
function remove_cpt_term($post_ID) {
    $post = get_post($post_ID);
    $term = get_term_by('slug', $post->post_name, 'custom_taxonomy');

    // target only our custom post type && if no posts are assigned to the term
    if ('custom_post_type' == $post->post_type && $term->count == 0)
        wp_delete_term($term->term_id, 'custom_taxonomy');
}
add_action('wp_trash_post', 'remove_cpt_term');
3
kaffolder