web-dev-qa-db-ja.com

新しいオプションタイプをオプションツリーに追加する方法

テーマモードと子テーマモードでオプションツリーを使用しています。新しいオプションタイプを追加しようとしています。新しいオプションの種類は、選択後のオプションの種類に基づいていますが、特定のカテゴリの投稿のみが一覧表示されます。

私は新しいファイルを作成し、それをot-loader.phpの178行目から始まるファイルの配列に追加しました。新しいファイルで、私は/includes/ot-functions-options-type.phpの905行目から始まる選択後のオプションタイプを切り取って貼り付けました。この新しいファイルを見ることができます ここ

私の投稿ではオプションの種類を選択しましたが、私は関数名に独自のスラッグを追加しました。私はそのスラッグをフォーマット外部設定ラッパーのCSSクラス.type-post-selectにも置いています。 post query post配列にcategoryパラメータを追加しました。

それから、自分が設定したカテゴリの投稿だけが表示されることを期待して、私の新しい投稿選択オプションタイプをテーマオプションに追加しました。それはすべてのカテゴリからの投稿を示しました。興味深いことに、オプションは.type-post-selectでラップされていました。私はまた、変更されたCSSを持たない通常のポストセレクトを作成しました。

実験として、私は同じ方法でオリジナルのpost-selectオプションにcategoryパラメータを追加するのに疲れました、そしてそれは私が予想したように正確に働きました - そのカテゴリからの投稿のみを表示します。残念ながら、私は6つの新しい投稿選択を作成する必要があり、それぞれが異なるカテゴリからの投稿を表示しています。

明らかに私はステップを逃しています、しかし私の人生のために私はそれを見つけることができません。私はオプションの種類を登録する必要があるか何か他の場所を探しましたが、それを見つけることができませんでした...

7
JPollock

あなたがやろうとしていることは、OptionTreeでコアファイルを編集することなく達成することができます。あなたのテーマfunctions.phpと以下のコードにあなたのカスタムオプションタイプ関数を追加してください。

/**
 * Filter to add custom option types.
 *
 * @param     array     An array of option types.
 * @return    array
 */
function add_custom_option_types( $types ) {

  $types['post_select_a_1'] = 'Post Select option type. (_a_1)';
  $types['post_select_a_2'] = 'Post Select option type. (_a_2)';
  $types['post_select_a_3'] = 'Post Select option type. (_a_3)';
  $types['post_select_a_4'] = 'Post Select option type. (_a_4)';
  $types['post_select_a_5'] = 'Post Select option type. (_a_5)';
  $types['post_select_a_6'] = 'Post Select option type. (_a_6)';

  return $types;

}
add_filter( 'ot_option_types_array', 'add_custom_option_types' );

これはあなたの関数をOptionTreeに自動的にロードするでしょう、そしてあなたはどんなコアファイルも編集する必要はありません。新しいオプションを追加するときには、2つの要件があります。 1つは、すべての関数の先頭にot_type_を付けなければならないということです。 2つ目は、新しい配列のキーを関数名からot_type_を引いたものと一致させる必要があるオプションの配列に追加する場合、キーを作成するときに-または_を使用できるということです。 ot_type_super_awesomeという名前のカスタム関数がある場合は、次のいずれかを使用してそれをフィルター処理された配列に追加できます。

$types['super_awesome'] = 'Super Awesome';

または

$types['super-awesome'] = 'Super Awesome';

混乱が解消されることを願っています。ちなみに、あなたが作成したファイルには2つのot_type_post_select_a_5があり、最後のものはot_type_post_select_a_6であるべきだと思います。乾杯!

4
Derek Herman