サポート » その他 » カスタムタクソノミーとタグの自動紐付け

  • 解決済 astlanox

    (@astlanox)


    なにかいい方法はないか?といった質問になります。
    プラグインや他の情報を検索しましたが同じ内容が中々見つからない状況です。

    やりたいこと:
    以下のようなカスタムタクソノミーとタグを用意し、自動的に紐付け

    タグ
    – キャベツ
    – りんご

    カスタムタクソノミー
    – 野菜
    – 果物

    予めリストのようなものを用意しておいて、記事のタグがリストにマッチした場合自動的にカスタムタクソノミーを投稿に追加するようなイメージです。

    これを投稿前に自動化したいです。

    例では、記事のタグにキャベツがあれば野菜というタクソノミーを追加、りんごがあれば果物というタクソノミーを追加するような動作です。

    単に文中に一致した文字列が合った時にタグを自動設定するようなプラグイン(Simple Tags)ならあったのですが、今回の要望にはマッチしませんでした。

    知見のある方がいらっしゃいましたら情報共有いただけますと幸いです。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • ishitaka

    (@ishitaka)

    こんにちは

    公式ディレクトリのプラグインをざっと探してみましたが見つかりませんでした。
    カテゴリーであれば、Auto Assign Post Category プラグインでできそうです。このプラグインのコードが参考になるのではないでしょうか。

    ishitaka

    (@ishitaka)

    rest_after_insert_post フィルターフック (WordPress 5.0 以降) でタグが追加されて保存されたときにタームを追加するサンプルを書いてみました。

    function my_rest_after_insert_post( $post, $request, $insert ) {
    	$json_params = $request->get_json_params();
    	if ( isset( $json_params['tags'] ) ) {
    
    		$tables = [
    			'キャベツ' => '野菜',
    			'りんご' => '果物',
    		];
    
    		$tags = wp_get_post_tags( $post->ID, array( 'fields' => 'names' ) );
    		$terms = [];
    		foreach ( $tags as $tag ) {
    			if ( isset( $tables[$tag] ) ) {
    				$terms[] = $tables[$tag];
    			}
    		}
    		if ( ! empty( $terms ) ) {
    			wp_set_object_terms( $post->ID, $terms, 'カスタムタクソノミー', true );
    		}
    	}
    }
    add_action( 'rest_after_insert_post', 'my_rest_after_insert_post', 10, 3 );
    astlanox

    (@astlanox)

    @ishitaka
    ご返信ありがとうございます。
    まさに、やりたかったことが出来そうなプラグインです。
    タグに応用するサンプルコードまでご丁寧に作成いただき、本当にありがとうございます。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「カスタムタクソノミーとタグの自動紐付け」には新たに返信することはできません。