メシのタネ

Webプログラミング 備忘録

  • DOMをPHPで操作できたらいいよね

    そうだよね。そう思うよね。JavaScriptでやると、画面がガタついたりするもんね。そうならないようにする方法もあるかもしれないけど、僕はできませんので、サーバー側でなんとかできたらええなぁと思って挑戦したけど、できませんでしたよ。PHP標準でHTMLをDOMにできるらしい今、技[...]

    続きを読む
  • 設計書ってなんで書くの?

    設計書をなぜ書くのかから始めてかれこれ3年近くこの禅問答をやっているわけですが、いまだに答えは出ません。ただ、その禅問答をやる中で設計書に対する取り組み方は大きく変わったので、その一部でも書いていきたい。基本設計はとにもかくにも必要だと思う設計書はいらぬ!という話をよく聞くし、自分[...]

    続きを読む
  • 書ききってやる。

    久々に書いてみる。久々に文章を書くということをやってみようと思う。伝える作業を観察したいと思ったからそうしたいと考えた。情緒的な文章は基本的にゴミ箱にぽいしてきましたが、情緒的なのも自分だと思う。「文章をかくという作業は、とりもなおさず自分と自分をとりまく事物との距離を確認すること[...]

    続きを読む
  • 普通の会社で2年普通に働いて思う事

    えらい寒くなりました。文句言いながらも現職を続けて2017年12月1日にめでたく2年がたちました。分かりやすいが乱暴に言えばITドカタと呼ばれる業界に入って案件のヒエラルキーの無慈悲さを痛感しながらも、それでもしょうがないと頑張る人たちに心を打たれながら「じゃあ俺も」と頑張れない自分に挫折して、とあ[...]

    続きを読む
  • jQueryUiのDatepicker利用時にminDate設定するとバグる件

    題名の通りなんですが、DatepickerでminDate使うとバグります。また後でキャプチャ見て貰いますけど、灰色の部分が、minDateで設定した日付が反復して出るようになるんですね。こういうの気が付かない人がいるかも知れませんが、ChoromeでminDate設定してる人は気にしてみてくだ[...]

    続きを読む

【WordPress】カスタム投稿が思いの他ややこしかった

sukotelishuhuro

WordPressはブログツールとして有名だったので、必要に迫らせない限りブログツールとして使うのが
良いだろうってことと、ぶっちゃけあんまし慣れない事したくないので、
カスタム投稿を避けて避けて居たんですけれど、いつまでも慣れないまま放っておくのも良くないので、
今回新コンテンツでも作ってみるかということで、カスタム投稿を使いました。
そしたら、結構勘違いしてることがありました。やっぱ実際やってみたほうが良いなって思いました。

カスタム投稿タイプ作成

カスタム投稿を作成する前提として、カスタム投稿を作っておく必要があります。
で、カスタム投稿の中にカテゴリを入れたい場合タクソノミーを定義する必要があります。
タクソノミーとは、カテゴリの別の言い方です。

この場合だとお米の種類の中のタイ米がカテゴリでお米の種類がタクソノミーです。
あんまり大した問題ではないです。ちなみにタームっていうのは、日本米の中の新潟産です。

詳しくはこの中の木構造見てください。
この中の根っこの名前がタクソノミーです。

カスタム投稿だけを作る場合にはタクソノミーの定義は必要ないです。
カスタム投稿の中にタクソノミーを設けたい場合タクソノミーの定義をする必要があります。

このかちびとさんの記事中のfunctions.phpに書かれるコードを使えばカスタム投稿の登録ができます。

以下にも同等のものを記載しておきます。

</p>
<p>//こっちでカスタム投稿を登録</p>
<p>add_action('init', 'my_custom_init');<br />
function my_custom_init()<br />
{<br />
  $labels = array(<br />
    'name' =&gt; _x('連載記事', 'post type general name'),<br />
    'singular_name' =&gt; _x('何回か続く記事', 'post type singular name'),<br />
    'add_new' =&gt; _x('新しく記事を書く', 'dogs'),<br />
    'add_new_item' =&gt; __('記事を書く'),<br />
    'edit_item' =&gt; __('記事の編集'),<br />
    'new_item' =&gt; __('新しい記事'),<br />
    'view_item' =&gt; __('記事を見る'),<br />
    'search_items' =&gt; __('記事から探す'),<br />
    'not_found' =&gt;  __('記事はありません'),<br />
    'not_found_in_trash' =&gt; __('ゴミ箱に記事はありません'),<br />
    'parent_item_colon' =&gt; ''<br />
  );<br />
  $args = array(<br />
    'labels' =&gt; $labels,<br />
    'public' =&gt; true,<br />
    'publicly_queryable' =&gt; true,<br />
    'show_ui' =&gt; true,<br />
    'query_var' =&gt; true,<br />
    'rewrite' =&gt; true,<br />
    'capability_type' =&gt; 'post',<br />
    'hierarchical' =&gt; false,<br />
    'menu_position' =&gt; 5,<br />
    'supports' =&gt; array('title','editor','thumbnail','custom-fields','excerpt','author','trackbacks','comments','revisions','page-attributes'),<br />
    'has_archive' =&gt; true<br />
  );<br />
  register_post_type('article',$args); //ここの第一引数がカスタム投稿タイプ名になる<br />
}</p>
<p>//投稿時のメッセージとか<br />
add_filter('post_updated_messages', 'book_updated_messages');<br />
function book_updated_messages( $messages ) {</p>
<p>  $messages['dogs'] = array(<br />
    0 =&gt; '', // ここは使用しません<br />
    1 =&gt; sprintf( __('記事を更新しました &lt;a href=&quot;%s&quot;&gt;記事を見る&lt;/a&gt;'), esc_url( get_permalink($post_ID) ) ),<br />
    2 =&gt; __('カスタムフィールドを更新しました'),<br />
    3 =&gt; __('カスタムフィールドを削除しました'),<br />
    4 =&gt; __('記事を更新'),<br />
    5 =&gt; isset($_GET['revision']) ? sprintf( __(' %s 前に記事を保存しました'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,<br />
    6 =&gt; sprintf( __('連載記事が公開されました &lt;a href=&quot;%s&quot;&gt;記事を見る&lt;/a&gt;'), esc_url( get_permalink($post_ID) ) ),<br />
    7 =&gt; __('記事を保存'),<br />
    8 =&gt; sprintf( __('記事を送信 &lt;a target=&quot;_blank&quot; href=&quot;%s&quot;&gt;プレビュー&lt;/a&gt;'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),<br />
    9 =&gt; sprintf( __('記事を予約投稿しました: &lt;strong&gt;%1$s&lt;/strong&gt;. &lt;a target=&quot;_blank&quot; href=&quot;%2$s&quot;&gt;プレビュー&lt;/a&gt;'),<br />
      date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post-&gt;post_date ) ), esc_url( get_permalink($post_ID) ) ),<br />
    10 =&gt; sprintf( __('記事の下書きを更新しました &lt;a target=&quot;_blank&quot; href=&quot;%s&quot;&gt;プレビュー&lt;/a&gt;'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),<br />
  );</p>
<p>  return $messages;<br />
}</p>
<p>//コッチでタクソノミー登録<br />
add_action('init', 'create_custom_taxonomies');<br />
function create_custom_taxonomies() {<br />
    register_taxonomy(<br />
        'customcat', // これがタクソノミー名<br />
        'article',  // 適用する投稿タイプ<br />
        array(<br />
            'label' =&gt; '連載記事カテゴリ',    // 表向きの分類名<br />
            'hierarchical' =&gt; true, // この値をtrueにしたからカテゴリと同じ<br />
            'query_var' =&gt; true,<br />
            'rewrite' =&gt; true,<br />
            'public' =&gt; true,<br />
            'show_ui' =&gt; true<br />
        )<br />
    );<br />
    register_taxonomy( // 二つ目の分類を追加する場合<br />
        'regtype',<br />
        'article',<br />
        array(<br />
            'label' =&gt; '連載記事の種別',<br />
            'hierarchical' =&gt; false, // この値をfalseにしたからタグと同じ<br />
            'query_var' =&gt; true,<br />
            'rewrite' =&gt; true,<br />
            'public' =&gt; true,<br />
            'show_ui' =&gt; true<br />
        )<br />
    );<br />
}</p>
<p>

register_taxonomy


register_post_type

詳しいパラメータCODEX載ってるのでみてね!

カスタム投稿タイプのTOPみたいなページ

やりたいことはとりあえず、hoge.com/カスタム投稿名/
こいつでアクセスした時に$postsが、
アドレスに書いてあるカスタム投稿名のデータを持っている状態にしたかった。

要は、hoge.com/カスタム投稿名/アドレスにアクセスしたら、
このカスタム投稿名が持っている記事一覧を出すみたいなことがしたかった。

これは、ここを参考にしました。
カスタム投稿タイプのアーカイブ用テンプレート

register_post_type()に与える引数の中の
has_archiveをtrueに設定して、

archive-カスタム投稿タイプ名.phpってファイルを作れば
このファイルで$postsの値はカスタム投稿タイプのデータになります。

タクソノミーの専用ページを作る

URLの値を判断して、
タームの一覧を出すページを作りたいので作りました。

正しいやり方に沿った上で私が思いつく案として
taxonomy-taxonomy-term.php
こういうページをターム分作ってあげるのが良いんだと思いますが、
これだと非常に面倒臭い。

スラッグを呼び出すにも、内部的にはどうもURLからは呼んできてなくて、
投稿の情報でデータを呼び出すか$_GETの値から呼び出してきてるっぽいです。
あくまで私が検索した範囲なので、良い方法あれば知りたいです。

なので、クエリに渡すパラメータとして、
URLからスラッグ名を取得するという方法で対処しました。
多分あまりオススメされていない方法なので、良い方法があれば
早めにそちらを使う方が良いと思います。

</p>
<p>$sp = parse_url($_SERVER[&quot;REQUEST_URI&quot;]); //URLを分解して<br />
$sp = explode(&quot;/&quot;,$sp[&quot;path&quot;]); //配列のpathを/で分割<br />
$sp = array_filter($sp,&quot;strlen&quot;); //配列が空のものを削除して<br />
$sp = array_values($sp); //インデックスを振りなおして<br />
$tax = count($sp)-1; //最後の配列番号を生成して</p>
<p>$obj = new WP_Query(<br />
               array('post_type' =&gt; 'article'),<br />
               array(<br />
                    'tax_query' =&gt; array(<br />
                    'taxonomy' =&gt; 'customcat',<br />
                    'field' =&gt; 'slug',<br />
                    'terms' =&gt; $sp[$tax], //クエリに入れる<br />
                    )<br />
               )<br />
     );</p>
<p>

なんかまだカスタム投稿について不明瞭な点が多いので
機械があれば、またなんとかしてやりたいなぁと思う次第です。

そんな訳で!
記事数1個ですけど、実は連載記事コンテンツを設けました!
メニューのとこにこーっそり追加されてるので、良かったら見てくださいねー!

こっからもいけます

関連記事

コメントをお待ちしております