Movatterモバイル変換


[0]ホーム

URL:


Hishikawa Takuro, profile picture
Uploaded byHishikawa Takuro
PDF, PPTX67,152 views

これからのpre_get_postsの話をしよう

第24回WordBench神戸で話した資料です。

Embed presentation

Download as PDF, PPTX
これからのby @HissyNC / WordBench Kobe Grouppre_get_posts: What's the Right Way to Use?pre_get_postsの話をしよう1
query_posts非推奨?『query_postsを捨てよ、pre_get_postsを使おう』というブログ記事を公開したところ、はてブなどでバズる。「いつの間にこんなことになっていたんだよ…」「非推奨だなんて!いますぐ直さなきゃ!」「急に言われても困る」「query_posts使いまくってたぜマジかよ…」「初心者にこの説明はキツイでしょ」等々の意見が噴出。2
pre_get_postsとは何か?結局、Codexのquery_postsのページに非推奨の文字が入ったのは一時的なもので、その後表現が修正され、「query_postsの代わりにpre_get_postsフィルターを使うことを強く推奨する」となった。ではなぜ数多のWordPress本でも紹介されているquery_postsが推奨されないのだろうか。pre_get_postsフィルターとは何なのか。3
まずテンプレートとは何か4
データベースから目的のデータを取得して表示するためのもの5
ではない6
テンプレートとは表示するデータを整形するためのもの7
データを取得する目的には本来使わない8
どんなデータを取得するかを決定するのは9
URL10
?p=1?cat=1?cat=1&post_type=book&paged=2クエリー・ストリングという$query_string11
URLでどのデータを取得するかが決まるどんな処理を行うかが決まる12
ほかのCMSでも同じ13
URLがページの内容を表している=インターネットの基本的な概念14
ここで疑問15
Webページにはたくさんのデータが表示されており各ページで共通のものもある16
たとえばサイドバーに新着記事を5件表示URLとは関係なくどのページにもある17
記事の下に関連記事を5件表示URLとは間接的に関係があるが直接示しているものではない18
これらをサブクエリーと呼ぶ19
?p=1?cat=1?cat=1&post_type=book&paged=2クエリー・ストリングと直接対応しているデータのことを20
メインクエリーと呼ぶ21
メインクエリーとサブクエリー違いを理解しよう22
トップページの内容としてニュースカテゴリーの記事を表示するメインクエリーorサブクエリー?23
トップページの内容としてニュースカテゴリーの記事を表示するメインクエリーorサブクエリー?24
WordPressでは、フロントページは新着投稿か、固定ページか、2択です。CMSとしてはそれだけ?と違和感がありますが、そういう設計ですので、本来特定のカテゴリーの記事をトップページで表示するのはWordPressではできません。get_postsを使うか、ウィジェットを使いましょう25
query_postsの迷宮26
query_postsとは本来メインクエリーを改変するためのもの27
http://example.com/?cat=128
http://example.com/?cat=1カテゴリーID が 128
http://example.com/?cat=1have_posts() = 投稿が存在する?カテゴリーID が 128
http://example.com/?cat=1have_posts() = 投稿が存在する?カテゴリーID が 1the_post() = テンプレートタグを有効化28
http://example.com/?cat=1have_posts() = 投稿が存在する?カテゴリーID が 1the_post() = テンプレートタグを有効化<a href= <?php the_permalink(); ?> ><h2><?php the_title(); ?></a></h2>28
http://example.com/?cat=1have_posts() = 投稿が存在する?カテゴリーID が 1the_post() = テンプレートタグを有効化<a href= <?php the_permalink(); ?> ><h2><?php the_title(); ?></a></h2>↓次の投稿へhave_posts() = 投稿が存在する?28
カテゴリーを指定しているが、それ以外は?表示件数(10件?)並び順(投稿日が新しい順)投稿タイプ(投稿)デフォルト設定がある29
メインクエリーにはデフォルト設定がある30
メインクエリーのデフォルト設定を変更したい= query_posts31
32
?cat=132
?cat=1 デフォルト設定32
?cat=1 デフォルト設定クエリーストリングの生成32
?cat=1条件分岐タグの設定デフォルト設定クエリーストリングの生成32
?cat=1条件分岐タグの設定デフォルト設定データベースから投稿を取得クエリーストリングの生成32
?cat=1条件分岐タグの設定デフォルト設定データベースから投稿を取得使用するテンプレートの読み込みクエリーストリングの生成32
?cat=1have_posts() = 投稿が存在する?the_post() = テンプレートタグを有効化<a href= <?php the_permalink(); ?> ><h2>条件分岐タグの設定デフォルト設定データベースから投稿を取得使用するテンプレートの読み込みクエリーストリングの生成32
?cat=1have_posts() = 投稿が存在する?the_post() = テンプレートタグを有効化条件分岐タグの設定デフォルト設定データベースから投稿を取得使用するテンプレートの読み込みクエリーストリングの生成32
?cat=1have_posts() = 投稿が存在する?the_post() = テンプレートタグを有効化条件分岐タグの設定デフォルト設定データベースから投稿を取得使用するテンプレートの読み込みquery_posts() = 投稿の再取得クエリーストリングの生成32
?cat=1have_posts() = 投稿が存在する?the_post() = テンプレートタグを有効化条件分岐タグの設定デフォルト設定データベースから投稿を取得使用するテンプレートの読み込みquery_posts() = 投稿の再取得クエリーストリングの生成32
?cat=1have_posts() = 投稿が存在する?the_post() = テンプレートタグを有効化条件分岐タグの設定デフォルト設定データベースから投稿を取得使用するテンプレートの読み込みquery_posts() = 投稿の再取得クエリーストリングの生成32
?cat=1have_posts() = 投稿が存在する?the_post() = テンプレートタグを有効化条件分岐タグの設定デフォルト設定データベースから投稿を取得使用するテンプレートの読み込みquery_posts() = 投稿の再取得クエリーストリングの生成クエリーストリングの再生成32
?cat=1have_posts() = 投稿が存在する?the_post() = テンプレートタグを有効化条件分岐タグの設定デフォルト設定データベースから投稿を取得使用するテンプレートの読み込みquery_posts() = 投稿の再取得クエリーストリングの生成クエリーストリングの再生成条件分岐タグの再設定32
?cat=1have_posts() = 投稿が存在する?the_post() = テンプレートタグを有効化条件分岐タグの設定デフォルト設定データベースから投稿を取得使用するテンプレートの読み込みquery_posts() = 投稿の再取得クエリーストリングの生成クエリーストリングの再生成条件分岐タグの再設定データベースから投稿を再取得32
?cat=1have_posts() = 投稿が存在する?the_post() = テンプレートタグを有効化条件分岐タグの設定デフォルト設定データベースから投稿を取得使用するテンプレートの読み込みquery_posts() = 投稿の再取得クエリーストリングの生成クエリーストリングの再生成条件分岐タグの再設定データベースから投稿を再取得query_posts以前のアレコレが消えてしまった!32
大丈夫!戻す手段があります33
wp_reset_query()query_posts発動前の状態に戻す34
query_posts何が問題なのか?35
ページ送りが効かない(頻出)原因 = $query_stringと結合していないglobal $query_string;query_posts( $query_string .'&order=ASC' );36
条件分岐タグの設定データベースから投稿を取得使用するテンプレートの読み込みquery_posts() = 投稿の再取得query_posts()以前の条件でテンプレートが選ばれてしまう=意図せず404になる37
条件分岐タグの設定データベースから投稿を取得使用するテンプレートの読み込みquery_posts() = 投稿の再取得条件分岐タグの再設定2回DBから投稿データを取得=非効率、表示遅速の原因38
条件分岐タグの設定データベースから投稿を取得使用するテンプレートの読み込みquery_posts() = 投稿の再取得条件分岐タグの再設定条件分岐タグが上書きされる=混乱のもと39
条件分岐タグの上書きと、query_posts()をサブクエリーの取得に使ってしまう間違いが重なるとカオス40
header.phpfooter.phpcategory.phpis_category() = truesidebar.phpでquery_posts()を使用wp_reset_query()書き忘れis_category() = falseテンプレートファイルをまたいで影響が出る41
まとめ42
query_postsは便利だが、影響範囲が大きすぎる43
条件分岐の上書きは初心者には分かりにくい44
これからの推奨される方法45
メインクエリーの改変=pre_get_posts46
サブクエリーの作成=get_posts47
サブクエリーの作成=get_posts条件分岐タグが書き換わらない47
用途によって使いわけよう48
メインクエリーの改変=pre_get_posts49
function 関数( $query ) {if ( is_admin() ¦¦ ! $query->is_main_query() )return;if ( クエリーの改変を適用する条件 ) {$query->set( パラメーター , 値 );return;}}add_action( 'pre_get_posts', '関数名' );pre_get_posts基本文法50
function 関数( $query ) {if ( is_admin() ¦¦ ! $query->is_main_query() )return;if ( クエリーの改変を適用する条件 ) {$query->set( パラメーター , 値 );return;}}add_action( 'pre_get_posts', '関数名' );pre_get_posts基本文法管理画面とメインクエリー以外には適用しない51
function 関数( $query ) {if ( is_admin() ¦¦ ! $query->is_main_query() )return;if ( クエリーの改変を適用する条件 ) {$query->set( パラメーター , 値 );return;}}add_action( 'pre_get_posts', '関数名' );pre_get_posts基本文法表示条件を変更したいページを絞り込む52
function 関数( $query ) {if ( is_admin() ¦¦ ! $query->is_main_query() )return;if ( クエリーの改変を適用する条件 ) {$query->set( パラメーター , 値 );return;}}add_action( 'pre_get_posts', '関数名' );pre_get_posts基本文法メインクエリーのパラメーターを設定53
function 関数( $query ) {if ( is_admin() ¦¦ ! $query->is_main_query() )return;if ( クエリーの改変を適用する条件 ) {$query->set( パラメーター , 値 );return;}}add_action( 'pre_get_posts', '関数名' );pre_get_posts基本文法関数の名前は自由につけて良い54
function 関数( $query ) {if ( is_admin() ¦¦ ! $query->is_main_query() )return;if ( クエリーの改変を適用する条件 ) {処理return;}}add_action( 'pre_get_posts', '関数名' );pre_get_posts基本文法【最重要】テーマのfunctions.phpに記載するquery_postsの様に各テンプレートには書かない55
?cat=1 デフォルト設定条件分岐タグの設定have_posts() = 投稿が存在する?the_post() = テンプレートタグを有効化<a href= <?php the_permalink(); ?> ><h2>データベースから投稿を取得使用するテンプレートの読み込みクエリーストリングの生成56
?cat=1 デフォルト設定条件分岐タグの設定have_posts() = 投稿が存在する?the_post() = テンプレートタグを有効化データベースから投稿を取得使用するテンプレートの読み込みクエリーストリングの生成56
?cat=1 デフォルト設定条件分岐タグの設定have_posts() = 投稿が存在する?the_post() = テンプレートタグを有効化データベースから投稿を取得使用するテンプレートの読み込みクエリーストリングの生成pre_get_posts フィルター= クエリーストリングに無い条件の追加56
function exclude_category_at_home( $query ) {if ( is_admin() ¦¦ ! $query->is_main_query() )return;if ( $query->is_home() ) {$query->set( 'cat', '-1,-1347' );return;}}add_action( 'pre_get_posts','exclude_category_at_home' );メインページから特定のカテゴリーを除外する57
function exclude_category_at_home( $query ) {if ( is_admin() ¦¦ ! $query->is_main_query() )return;if ( $query->is_home() ) {$query->set( 'cat', '-1,-1347' );return;}}add_action( 'pre_get_posts','exclude_category_at_home' );メインページから特定のカテゴリーを除外するメインページのみに制限注意:is_home() ではなく$query->is_home()58
function exclude_category_at_home( $query ) {if ( is_admin() ¦¦ ! $query->is_main_query() )return;if ( $query->is_home() ) {$query->set( 'cat', '-1,-1347' );return;}}add_action( 'pre_get_posts','exclude_category_at_home' );メインページから特定のカテゴリーを除外する$query->set( パラメーター , 値 );使えるパラメーターはCodexの関数リファレンス/WP_Queryを参照59
function search_exclude_cat_1( $query ) {if ( is_admin() ¦¦ ! $query->is_main_query() )return;if ( $query->is_search() ) {$query->set( 'category__not_in', array(1) );return;}}add_action( 'pre_get_posts','search_exclude_cat_1' );検索結果から特定のカテゴリーを除外する60
function search_exclude_cat_1( $query ) {if ( is_admin() ¦¦ ! $query->is_main_query() )return;if ( $query->is_search() ) {$query->set( 'category__not_in', array(1) );return;}}add_action( 'pre_get_posts','search_exclude_cat_1' );検索結果から特定のカテゴリーを除外する検索結果でIDが1のカテゴリーを除外配列で指定することもできる61
function search_only_post( $query ) {if ( is_admin() ¦¦ ! $query->is_main_query() )return;if ( $query->is_search() ) {$query->set( 'post_type', 'post' );return;}}add_action( 'pre_get_posts','search_only_post' );検索結果から固定ページを除外(投稿のみ)62
function search_only_post( $query ) {if ( is_admin() ¦¦ ! $query->is_main_query() )return;if ( $query->is_search() ) {$query->set( 'post_type', 'post' );return;}}add_action( 'pre_get_posts','search_only_post' );検索結果から固定ページを除外(投稿のみ)検索結果のみに制限Codexのサンプルは$query->is_searchプロパティを見るより関数で書こう$query->is_search() → ○63
function set_post_per_page( $query ) {if ( is_admin() || ! $query->is_main_query() )return;if ( $query->is_home() ) {$query->set( 'posts_per_page', 1 );return;}if ( $query->is_post_type_archive( 'movie' ) ) {$query->set( 'posts_per_page', 50 );return;}}add_action( 'pre_get_posts', 'set_post_per_page');条件にしたがって表示件数を変更64
function set_post_per_page( $query ) {if ( is_admin() || ! $query->is_main_query() )return;if ( $query->is_home() ) {$query->set( 'posts_per_page', 1 );return;}if ( $query->is_post_type_archive( 'movie' ) ) {$query->set( 'posts_per_page', 50 );return;}}add_action( 'pre_get_posts', 'set_post_per_page');条件にしたがって表示件数を変更メインページでは1件表示65
function set_post_per_page( $query ) {if ( is_admin() || ! $query->is_main_query() )return;if ( $query->is_home() ) {$query->set( 'posts_per_page', 1 );return;}if ( $query->is_post_type_archive( 'movie' ) ) {$query->set( 'posts_per_page', 50 );return;}}add_action( 'pre_get_posts', 'set_post_per_page');条件にしたがって表示件数を変更movie 投稿タイプのアーカイブでは50件表示66
注意点あくまでパラメーターの追加固定ページをアーカイブに等根本的に変更するのは厳しい= サブクエリーを使う67
注意点一部の条件分岐はpre_get_postsのタイミングでは動作しない例:is_front_page()68
サブクエリーの作成=get_posts69
global $post;$args = array( 'posts_per_page' => 5, 'cat' => 1 );$myposts = get_posts( $args );foreach( $myposts as $post ) {setup_postdata($post);?><h1><?php the_title(); ?></h1><?php}wp_reset_postdata();get_posts記述例70
global $post;$args = array( 'posts_per_page' => 5, 'cat' => 1 );$myposts = get_posts( $args );foreach( $myposts as $post ) {setup_postdata($post);?><h1><?php the_title(); ?></h1><?php}wp_reset_postdata();get_posts記述例テンプレートタグのセットアップテンプレートタグのリセット71
Codexで get_postsのサンプルの書き方が微妙にまちまちCodexの改善に期待72
$args = array('posts_per_page' => 5,'offset' => 0,'cat' => 0,'orderby' => 'post_date','order' => 'DESC','post_type' => 'post','post_status' => 'publish','suppress_filters' => true,'ignore_sticky_posts' => true,'no_found_rows' => true);WP_Query記述例$the_query = new WP_Query( $args );if ( $the_query->have_posts() ) {while ( $the_query->have_posts() ) {$the_query->the_post();?><h1><?php the_title(); ?></h1><?php}}wp_reset_postdata();上級者向けかも73
まとめ74
メインクエリーの変更はpre_get_postsサブクエリーの作成はget_posts (or WP_Query)使い分ける75
Thanks!質問は公式フォーラムまたは Twitter: @HissyNC まで76

Recommended

PPTX
Android+init+process
PDF
BackBox Linux: Simulazione di un Penetration Test
PDF
You Don't Know Query (WordCamp Netherlands 2012)
PDF
WordPressで投稿記事情報の取得方法
PDF
クライアントに感謝されるCMS導入のコツ
PDF
CMS導入で企業のWebサイト運営はこう変わる!
PDF
あなたがWordCamp Kansai 2014に行くべき5つの理由
PDF
WordPressがつくりだすCSSを利用する 初級編
PDF
a-blog cms 2.0 を活用した新しいWeb制作のワークフロー
PDF
ユーザーにやさしい管理画面をつくるために。テーマ制作者ができること 初級編【WordCamp Kansai 2014】
PDF
町のウェブ屋があえて 「CMSの機能をダイエットする」 ことから提案する理由
PDF
concrete5で実践するリードナーチャリング
PDF
プロトタイプ時代の
WordPressテーマの作り方・考え方
PDF
WordCamp Kansai 2015 - WordPress.org フォーラム参加のススメ
PDF
Concrete5で運用をデザイン
PDF
これからのCMSマーケットトレンドとPHP (for fukuoka.php)
PDF
フリーランスの事務机&お財布事情
KEY
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
PDF
ノンプログラマーのためのカンタンWordPressテーマ作成入門 〜子テーマでテーマ作成&カスタマイズ〜
PDF
クライアントと同じ方向を向くという事
PPTX
HTML5/JavaScriptで作るAndroidアプリ開発seminar
PDF
進化するオープンソース・エンタープライズCMSがWeb戦略を変える
PDF
"От мобильных скачиваемых игр к мобильным социалкам" Юлия Палатовская, директ...
PPTX
Bangkit dari kefuturan
PPTX
"Инвестирование и другие способы получить деньги на игровой проект", Александ...
DOC
Web conferencing
PDF
Kaldor1955
PDF
Harrod1974
PPTX
デザイナーのためのPHP講座 for WordPress (初級)
PDF
ゼロからつくるWord pressテーマ第9回

More Related Content

PPTX
Android+init+process
PDF
BackBox Linux: Simulazione di un Penetration Test
PDF
You Don't Know Query (WordCamp Netherlands 2012)
PDF
WordPressで投稿記事情報の取得方法
PDF
クライアントに感謝されるCMS導入のコツ
PDF
CMS導入で企業のWebサイト運営はこう変わる!
PDF
あなたがWordCamp Kansai 2014に行くべき5つの理由
PDF
WordPressがつくりだすCSSを利用する 初級編
Android+init+process
BackBox Linux: Simulazione di un Penetration Test
You Don't Know Query (WordCamp Netherlands 2012)
WordPressで投稿記事情報の取得方法
クライアントに感謝されるCMS導入のコツ
CMS導入で企業のWebサイト運営はこう変わる!
あなたがWordCamp Kansai 2014に行くべき5つの理由
WordPressがつくりだすCSSを利用する 初級編

Viewers also liked

PDF
a-blog cms 2.0 を活用した新しいWeb制作のワークフロー
PDF
ユーザーにやさしい管理画面をつくるために。テーマ制作者ができること 初級編【WordCamp Kansai 2014】
PDF
町のウェブ屋があえて 「CMSの機能をダイエットする」 ことから提案する理由
PDF
concrete5で実践するリードナーチャリング
PDF
プロトタイプ時代の
WordPressテーマの作り方・考え方
PDF
WordCamp Kansai 2015 - WordPress.org フォーラム参加のススメ
PDF
Concrete5で運用をデザイン
PDF
これからのCMSマーケットトレンドとPHP (for fukuoka.php)
PDF
フリーランスの事務机&お財布事情
KEY
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
PDF
ノンプログラマーのためのカンタンWordPressテーマ作成入門 〜子テーマでテーマ作成&カスタマイズ〜
PDF
クライアントと同じ方向を向くという事
PPTX
HTML5/JavaScriptで作るAndroidアプリ開発seminar
PDF
進化するオープンソース・エンタープライズCMSがWeb戦略を変える
PDF
"От мобильных скачиваемых игр к мобильным социалкам" Юлия Палатовская, директ...
PPTX
Bangkit dari kefuturan
PPTX
"Инвестирование и другие способы получить деньги на игровой проект", Александ...
DOC
Web conferencing
PDF
Kaldor1955
PDF
Harrod1974
a-blog cms 2.0 を活用した新しいWeb制作のワークフロー
ユーザーにやさしい管理画面をつくるために。テーマ制作者ができること 初級編【WordCamp Kansai 2014】
町のウェブ屋があえて 「CMSの機能をダイエットする」 ことから提案する理由
concrete5で実践するリードナーチャリング
プロトタイプ時代の
WordPressテーマの作り方・考え方
WordCamp Kansai 2015 - WordPress.org フォーラム参加のススメ
Concrete5で運用をデザイン
これからのCMSマーケットトレンドとPHP (for fukuoka.php)
フリーランスの事務机&お財布事情
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
ノンプログラマーのためのカンタンWordPressテーマ作成入門 〜子テーマでテーマ作成&カスタマイズ〜
クライアントと同じ方向を向くという事
HTML5/JavaScriptで作るAndroidアプリ開発seminar
進化するオープンソース・エンタープライズCMSがWeb戦略を変える
"От мобильных скачиваемых игр к мобильным социалкам" Юлия Палатовская, директ...
Bangkit dari kefuturan
"Инвестирование и другие способы получить деньги на игровой проект", Александ...
Web conferencing
Kaldor1955
Harrod1974

Similar to これからのpre_get_postsの話をしよう

PPTX
デザイナーのためのPHP講座 for WordPress (初級)
PDF
ゼロからつくるWord pressテーマ第9回
PDF
4時間まったりWordPressテーマ作成講座
PDF
テーマ制作時の疑問とノンプログラマーにも優しいテーマを考える
PDF
WordPress実践 導入からカスタマイズまで
PDF
WordPressでオリジナルサイトを作るための最初の一歩的なカスタマイズテクニック
KEY
フラットなPHPからフレームワークへ
KEY
フラットなPHPからフレームワークへ
デザイナーのためのPHP講座 for WordPress (初級)
ゼロからつくるWord pressテーマ第9回
4時間まったりWordPressテーマ作成講座
テーマ制作時の疑問とノンプログラマーにも優しいテーマを考える
WordPress実践 導入からカスタマイズまで
WordPressでオリジナルサイトを作るための最初の一歩的なカスタマイズテクニック
フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ

More from Hishikawa Takuro

PDF
これから concrete5 を始める Web 制作者に伝えたい concrete5 と WordPress ここが一緒、ここが違う!
PDF
エンジニアのための営業入門
PDF
concrete5 CMS「運用」ケーススタディ
PDF
Calypso動かしてみたよ!
PDF
concrete5の紹介
PDF
concrete5 最新事情 2015
PDF
concrete5セミナー資料公開版
PDF
WordPress使いのためのconcrete5入門
PDF
concrete5で行なうcms導入提案のポイント
PDF
concrete5.7のご紹介
PDF
世界一即戦力なCMS
PDF
はじめての concrete5 でウェブサイト作成〜入門チュートリアルガイド
PDF
オープンソースCMSに学ぶ、前PSR時代のプロジェクトが脱レガシーする5つの方法
PDF
Getting Started with WordPress JSON REST API
PDF
concrete5 in Japan 2014
PDF
concrete5
 バージョン5.7のご紹介
PDF
concrete5 5.6.3.1日本語版の紹介
PDF
concrete5デザインカスタマイズに必要なPHPの知識
PDF
concrete5って何?〜Web制作者対象〜2014年版
PDF
コミュニティと仕事論
これから concrete5 を始める Web 制作者に伝えたい concrete5 と WordPress ここが一緒、ここが違う!
エンジニアのための営業入門
concrete5 CMS「運用」ケーススタディ
Calypso動かしてみたよ!
concrete5の紹介
concrete5 最新事情 2015
concrete5セミナー資料公開版
WordPress使いのためのconcrete5入門
concrete5で行なうcms導入提案のポイント
concrete5.7のご紹介
世界一即戦力なCMS
はじめての concrete5 でウェブサイト作成〜入門チュートリアルガイド
オープンソースCMSに学ぶ、前PSR時代のプロジェクトが脱レガシーする5つの方法
Getting Started with WordPress JSON REST API
concrete5 in Japan 2014
concrete5
 バージョン5.7のご紹介
concrete5 5.6.3.1日本語版の紹介
concrete5デザインカスタマイズに必要なPHPの知識
concrete5って何?〜Web制作者対象〜2014年版
コミュニティと仕事論

これからのpre_get_postsの話をしよう


[8]ページ先頭

©2009-2025 Movatter.jp