web-dev-qa-db-ja.com

自動保存時のカスタム投稿タイプのデフォルトカテゴリの設定

私は数時間探していて、複数の投稿を調べましたが、これはうまくいくようです。

カテゴリが割り当てられていないとユーザーがカスタム投稿タイプの下書きを表示できないという奇妙なバグがあります。ですから、もし彼らが 'ドラフトとして保存'をクリックして後でそれに戻って行きたいのであれば、それは彼らには見えません(私は管理者として入り、彼らに見えるようにカテゴリを設定する必要があります)私はなぜこれが起こっているのかわかりませんが、私はそれを回避しても構わないと思っています。

Settings> Writingでは、通常の投稿のデフォルトカテゴリを設定できますが、カスタム投稿タイプにはこのようなオプションはありません。通常の投稿と同じように、デフォルトの種類を[未分類]に設定しても問題ありません。だから私はこれを達成しようとしています。

this のような私が出くわしたスニペットは '公開時のデフォルトカテゴリ'を目的としていますが、自動保存時に必要になります( 'ドラフトの保存'と '公開のための送信'へのアクセス権があります)。私が遭遇した少なくとも6つは未回答です。

私は1つの特定のコードをうまく実装できませんでした(私の人生の断片を見つけることはできませんが、この例で使用されるデフォルトのカテゴリは 'authors'です)。これは私を悩ませています、そして私は本当にあなたの助けに感謝します。ありがとう。

編集:私は( ここ から得た)次のコードを試してみましたし、投稿タイプ「コミュニティ」の保存時に自動的にチェックされる「未分類」を取得しましたが、問題は完全にオーバーライドです_他のカテゴリはこれに置き換えることができます。つまり、「未分類」をオフにして意味のあるカテゴリを選択すると、「公開」または「保存」時にそれらの選択がすべて消去され、コミュニティに戻ります。単に「未分類」にする必要があります まで ユーザーはそのデフォルトのカテゴリーを置き換えます(デフォルトのカテゴリーが通常の「投稿」タイプで機能するのとまったく同じ方法で)。

function add_comm_category_automatically($post_ID) {
global $wpdb;
if(!wp_is_post_revision($post_ID)) {
$uncategorized= array (1);
wp_set_object_terms( $post_ID, $uncategorized, 'category');
}
}
add_action('save_post', 'add_comm_category_automatically');
4
zk87

Save_postアクションフックを使用し、コールバック関数でwp_set_object_terms($ object_id、$ terms、$ taxonomy、$ append)関数を使用してください。

カスタム投稿タイプの場合、コードは次のようになります。

function save_book_meta( $post_id, $post, $update ) {

    $slug = 'book'; //Slug of CPT

    // If this isn't a 'book' post, don't update it.
    if ( $slug != $post->post_type ) {
        return;
    }

    wp_set_object_terms( get_the_ID(), $term_id, $taxonomy );
}

add_action( 'save_post', 'save_book_meta', 10, 3 );

$ taxonomy - 用語をオブジェクトに関連付けるためのコンテキスト。これはcategory、post_tag、または別の分類法の名前になります。

$ term_id - 分類法の用語ID

私はあなたのプロジェクトを完全には知らないので、あなたはあなたがやりたかったことをする方法としてこの断片を考えることができます。

詳細については、以下の2つのリンクを参照してください。

https://codex.wordpress.org/Function_Reference/wp_set_object_terms

https://codex.wordpress.org/Plugin_API/Action_Reference/save_post

私はあなたが道を見つけることを願っています。

2
mishu

CPTとカスタム分類法を構築するためにpods.ioを使用しています。同じ問題がありました。 @mishuからのコードで、私は自分の目標を達成することができました。

function event_preset_category( $post_id, $post, $update ) {

    $slug = 'termine'; //Slug of CPT

    // If this isn't the right slug, don't update it.
    if ( $slug != $post->post_type ) {
        return;
    }

    // Get the ID of default/ fallback category
    // $default_term = get_term_by('slug', 'your_term_slug', 'your_custom_taxonomy');

    $default_term = get_term_by('slug', 'alle', 'termin_cat');

    wp_set_object_terms( get_the_ID(), $default_term->term_id, 'termin_cat' );
}

add_action( 'save_post', 'event_preset_category', 10, 3 );
0
BrainBUG