[ 解決済 ] VKBLOCKS投稿リスト「画像右上分類」と「分類(全項目)」で表示されるタームをカスタマイズしたい

VWSとは フォーラム Lightning [ 解決済 ] VKBLOCKS投稿リスト「画像右上分類」と「分類(全項目)」で表示されるタームをカスタマイズしたい

[ 解決済 ] VKBLOCKS投稿リスト「画像右上分類」と「分類(全項目)」で表示されるタームをカスタマイズしたい

  • このトピックには10件の返信、3人の参加者があり、最後にVektor,Incにより2週、 1日前に更新されました。
11件の投稿を表示中 - 1 - 11件目 (全11件中)
  • 投稿者
    投稿
  • #55838

    じょーじ
    参加者

    ■ WordPress のバージョン
    5.8

    ■ テーマ・プラグインは全て最新版で確認してください。
    確認しました。

    ■ テーマの種類
    Lightning ( G3 ) + Lightning G3 Pro Unit

    ■ テーマのバージョン
    14.8.2

    ■ Pro Unit のバージョン
    0.9.5

    ■ スキンの種類
    Origin III

    ■ 関連しそうなプラグインを一つづつ停止して症状が改善するか確認してください。
    確認しました。

    ■ プラグインの種類・バージョン
    VK Blocks Pro バージョン 1.14.1

    ■ 期待する動作
    「画像右上分類」は、特定のカスタムタクソノミーの子タームからのみ表示されるようにしたい。
    「分類(全項目)」は、上に加えて、タクソノミーの表示順をカスタムしたい。

    ■ 自分で試した事
    vk_get_display_taxonomies_exclusionのフィルターを使い、特定のタクソノミーごと表示しないことはできた。

    ■ 症状が発生するブラウザ
    Chrome

    ■ 実際の症状
    「画像右上分類」は、作成が古いタクソノミーの親タームが表示される。
    「分類(全項目)」は、作成が古いタクソノミー順に表示され、親・子すべてのタームが表示される。

    ■ その他特記事項

    Attachments:
    You must be logged in to view attached files.
    #55844

    新規にカスタム投稿タイプを作る前提で考えましたので、既存のカスタム投稿タイプだと一部ご期待通りでないかもしれませんが、こんなやり方もできるということで紹介させていただきます。

    「画像右上分類」は、特定のカスタムタクソノミーの子タームからのみ表示されるようにしたい。

    VK All in One Expansion Unit のカスタム投稿タイプマネージャーを使う場合は1番目に指定したカスタム分類が「画像右上分類」に表示されます。

    【添付画像】custom-post-type-1.png

    「分類(全項目)」は、上に加えて、タクソノミーの表示順をカスタムしたい。

    以下のような CSS を書いて表示順をコントロールできます。

    .vk_post_taxonomies {
    display: flex;
    flex-direction: column;
    }
    
    .vk_post_taxonomy-area {
    order: 1;
    }
    
    .vk_post_taxonomy-industry {
    order: 2;
    }
    
    .vk_post_taxonomy-employees {
    order: 3;
    }

    【添付画像】custom-post-type-2.png

    Attachments:
    You must be logged in to view attached files.
    #55850

    さっきの回答に補足します。

    子タームからのみ表示されるように

    すみません、このご質問の回答にはなっていませんでした。

    とりあえず、表示順のコントロールのところだけご参考にどうぞ。

    【追記】
    子タームだけ表示するのってむずかしそうなので、エリア と 都道府県 を別々のタクソノミーに分けるのってダメでしょうか?

    • この返信は2週、 4日前に対馬 俊彦が編集しました。
    #55872

    Vektor,Inc
    キーマスター

    しばらくお待ちください。

    #55881

    じょーじ
    参加者

    ご回答ありがとうございます。

    CSSを使用するのは盲点でした。
    CSSを使用して「分類(全項目)」の表示順をコントロール出来ました。

    子タームだけ表示するのってむずかしそうなので、エリア と 都道府県 を別々のタクソノミーに分けるのってダメでしょうか?

    タクソノミー構造を変えない方法を探しております。

    #55885

    タクソノミー構造を変えない方法を探しております。

    ですよね。

    どのようにすればできるのか、私も興味があります。

    どなたかからの回答があるかもしれません。

    #55886

    Vektor,Inc
    キーマスター

    しばらくお待ちください。

    #55891

    Vektor,Inc
    キーマスター

    たぶんこれでいけると思います。

    by いしかわ

    
    function my_vk_post_custom_term( $options, $post ){
    	if ( 'event' === get_post_type() ) {
    		// 元の画像右上のカスタム分類名を非表示に.
    		$options['display_image_overlay_term'] = false;
    		// 画像右上に表示するカスタム分類
    		$options['body_append'] = my_get_vk_post_custom_single_term( $post );
    	}
    	return $options;
    }
    add_filter( 'vk_post_options', 'my_vk_post_custom_term', 10, 2 );
    
    /**
     * 投稿一覧画面で表示する投稿情報画像右上のカスタム分類
     *
     * @param object $post : 1件分の投稿情報.
     */
    function my_get_vk_post_custom_single_term( $post ) {
    
    	// 表示したい投稿タイプを条件分岐で指定します.
    	// ※その他必要に応じて $options や $post の中身を元に条件分岐を追加してください.
    	if ( 'event' === $post->post_type ) {
    
    		$args = array(
    			'class' => 'vk_post_imgOuter_singleTermLabel', // クラス名を追加する場合は指定.
    		);
    
    		$outer_class = ' class="' . esc_attr( $args['class'] ) . '"';
    
    		$single_term_with_color = '';
    		// 表示対象に指定するカスタム分類名.
    		$taxonomy = 'area';
    		// 投稿に紐付いているカスタム分類を取得.
    		$terms = get_the_terms( $post->ID, $taxonomy );
    
    		$term_id = '';
    		foreach ( $terms as $key => $term ) {
    			// 親のないタームの場合.
    			if ( ! $term->parent ) {
    				// 親のないタームタームを除外.
    				unset( $terms[ $key ] );
    			}
    		}
    		// 配列キーのふりなおし.
    		$terms = array_values( $terms );
    
    		if ( ! empty( $terms[0] ) ) {
    			$term_name = esc_html( $terms[0]->name );
    			if ( method_exists( 'Vk_term_color', 'get_term_color' ) ) {
    
    				$term_color              = Vk_term_color::get_term_color( $terms[0]->term_id );
    				$term_color              = ( $term_color ) ? ' style="color:#fff;background-color:' . $term_color . '"' : '';
    
    				$single_term_with_color .= '<span' . $outer_class . $term_color . '>';
    				$single_term_with_color .= $term_name;
    				$single_term_with_color .= '</span>';
    			}
    		}
    
    	}
    
    	return $single_term_with_color;
    }
    #55934

    Vektor,Inc
    キーマスター

    追伸

    対馬さんから指摘いただいたのですが

    if ( 'event' === $post->post_type ) {

    の部分は

    if ( ‘event’ === get_post_type() ) {

    の方が上手動作が安定するかもしれません。

    ※ event は制御対象にする投稿タイプ名です。

    #55972

    じょーじ
    参加者

    いしかわ 様

    ご回答ありがとうございます。
    「画像右上分類」を特定のタクソノミーの子タームから表示するように出来ました。

    コードは下記になります。投稿にタクソノミーが設定されていない場合を考慮してif文を追加しています。

    function my_vk_post_custom_term($options, $post)
    {
    	if (get_post_type() === 'company') {
    		// 元の画像右上のカスタム分類名を非表示に.
    		$options['display_image_overlay_term'] = false;
    		// 画像右上に表示するカスタム分類
    		$options['body_append'] = my_get_vk_post_custom_single_term($post);
    	}
    	return $options;
    }
    add_filter('vk_post_options', 'my_vk_post_custom_term', 10, 2);
    
    /**
     * 投稿一覧画面で表示する投稿情報画像右上のカスタム分類.
     *
     * @param object $post : 1件分の投稿情報
     */
    function my_get_vk_post_custom_single_term($post)
    {
    	// 表示したい投稿タイプを条件分岐で指定します.
    	// ※その他必要に応じて $options や $post の中身を元に条件分岐を追加してください.
    	if (get_post_type() === 'company') {
    		$args = [
    			'class' => 'vk_post_imgOuter_singleTermLabel', // クラス名を追加する場合は指定.
    		];
    
    		$outer_class = ' class="' . esc_attr($args['class']) . '"';
    
    		$single_term_with_color = '';
    		// 表示対象に指定するカスタム分類名.
    		$taxonomy = 'area';
    		// 投稿に紐付いているカスタム分類を取得.
    		$terms = get_the_terms($post->ID, $taxonomy);
    
    		if ($terms) {
    			foreach ($terms as $key => $term) {
    				// 親タームの場合.
    				if (!$term->parent) {
    					// 親タームを除外.
    					unset($terms[$key]);
    				}
    			}
    			// 配列キーのふりなおし.
    			$terms = array_values($terms);
    		}
    
    		if (!empty($terms[0])) {
    			$term_name = esc_html($terms[0]->name);
    
    			if (method_exists('Vk_term_color', 'get_term_color')) {
    				$term_color = Vk_term_color::get_term_color($terms[0]->term_id);
    				$term_color = ($term_color) ? ' style="color:#fff;background-color:' . $term_color . '"' : '';
    
    				$single_term_with_color .= '<span' . $outer_class . $term_color . '>';
    				$single_term_with_color .= $term_name;
    				$single_term_with_color .= '</span>';
    			}
    		}
    	}
    
    	return $single_term_with_color;
    }
    #55973

    Vektor,Inc
    キーマスター

    投稿にタクソノミーが設定されていない場合を考慮してif文を追加しています。

    たしかに元のコードだとエラーになってしまいますね。
    共有ありがとうございます。

11件の投稿を表示中 - 1 - 11件目 (全11件中)
  • このトピックに返信するにはログインが必要です。