目次
こんにちは。ぱっくんわにです。
突然ですが、実は私はエスパーなので、あなたの住んでいる場所が分かります。
パルデア地方かバンカラ街ですね?
バレた…!!と思ったそこの貴方とは仲良くなれそうですね笑
さて、今回はタイトルにある通り、MW WP Formのセレクトボックスの中の選択肢に、一つのカスタム投稿タイプの投稿オブジェクトを出力する方法について書いていこうと思います!
やりたい事
ある投稿タイプの投稿(投稿オブジェクト)のタイトルを。。。
MW WP Formのセレクトボックスの選択肢として出せるようにしたい!!!
Word Press 管理画面上での作業
まずはMW WP Formを用意します。今回は分かりやすくするため、セレクトボックスを一つ設置しただけの簡易的なフォームにしてあります。
セレクトボックスのname属性を’aaabbbccc’にしてあります。このnameと、フォーム識別子の末尾についている3桁以下の数字(今回なら104)を後で使うので覚えておきましょう!
次に出力したい投稿タイプのスラッグ名を確認します。今回の場合であれば’custom_post_slug’がこれにあたります。これも後で用いるので覚えておきましょう!
最後はカスタム投稿タイプの投稿を出力する順番を変えるためにカスタムフィールドを設定しようとしているところです。デフォルトでは公開された日時順になっています。変更する必要がなければ読み飛ばしてもらって構いません!
フィールドタイプを番号(昔のものだと数値?)、フィールド名と初期値はご自由に!フィールド名は後で使います!
表示条件は「投稿タイプ」「等しい」「(目的の投稿タイプ)」にしておきましょう。
目的の投稿タイプの投稿を見ると、先ほど追加したカスタムフィールドが表示されているはずです。全て初期値から値を変えておきましょう!(何故かは不明ですが初期値だと出力されないかも)
functions.phpに記載する内容
以下をfunctions.phpにコピペして、コメントアウトの記述に従って書き換えてもらえればと思います。
ここではフィルターフックを利用するやり方で実装しています。
//セレクトボックスのオプションにカスタム投稿タイプの内容を表示する(フィルターフックで実装)
function add_post_list( $children, $atts ) {
//'sample-slugname'を出力したいページのスラッグ名に変える
if (is_page('sample-slugname') ) {
//'aaabbbccc'を自分の作ったセレクトボックスのnameに書き換える
if ( 'aaabbbccc' == $atts['name'] ) {
$posts = get_posts( array(
'post_type' => 'aaabbbccc',
'posts_per_page' => -1,
//ASC:昇順、DESC:降順
'order'=>'ASC',
//カスタムフィールドでの並び替えをしない場合は以下二行省略
//'query_id'は自分のカスタムフィールド名に書き換え
'meta_key'=>'query_id',
'orderby'=>'meta_value_num'
) );
foreach ( $posts as $post ) {
$children[$post->post_title] = $post->post_title;
}
}
return $children;
}
}
//以下の104の部分を自分のフォームのフォーム識別子の番号に書き換え
add_filter( 'mwform_choices_mw-wp-form-104', 'add_post_list', 10, 2 );
最後に
以上で必要な作業は終わりです。無事にフォーム出し分け出来たでしょうか?
フォームは色々とつまづくところが多いなあと業務中にひしひしと感じております。この記事が誰かの役に立つことを祈っております。
それではまたお会いしましょう!