カテゴリー: WordPress

  • WEBデザインの参考になるようなサイトを集めたサイトが最近たくさんありますよね。
    僕もよくお世話になっています。
    どのサイトも個性があったりで面白かったり。

    などetc…

    でも、それとは別に、自分のためのブックマークサイトを持ったほうがいいと思います。昔はよくあれもこれもはてなブックマークに入れていたのですが、探し出すのに一苦労だったわけです。だいたい、記事の内容ではてブしたサイトはキーワードで検索できるんですけど、ビジュアルが素敵なサイトとかは、全然探せないのです。

    というわけで、自分で作ってしまおうと思ったわけです。とりあえず作ったものはこちら:http://bm.torounit.com/
    というわけで、WordPressでブックマークサイト自作のチュートリアルです。

    自作するメリット

    • タグ・カテゴリなどが自分仕様にできる。
    • Press This(ブックマークレット)が使えて便利!
    • 自分の勉強になるかもしれない。
    • コードが書けて楽しい。
    • 自分も有名なWEBデザイナーになった気分。

    まぁ、とりあえず、Press Thisが使えるってのは便利だと思います。見てるページをそのままクリックだけで登録できるのはなかなか便利です。

    作り方

    とりあえず、Press Thisをすると、
    [html]
    <a href="http://hoge.com">ほげほげ</a>
    [/html]
    のような形で、ページのURLとタイトルが本文中に挿入されます。
    なので、それを正規表現で取り出して、カスタムフィールドに保存します。

    [php]
    function save_post_url($post_id){
    $postData = get_post($post_id);
    preg_match(‘/<a .*href=[\’"]+([^\’" ]+).*?>(.*)<\/a>/’,$postData->post_content,$match);

    save_post_meta($post_id,"site_url",$match[1]);
    save_post_meta($post_id,"site_title",$match[2]);
    }

    function save_post_meta($post_id,$data_key,$save_data){
    if ( "" == get_post_meta( $post_id, $data_key)) {
    add_post_meta( $post_id, $data_key, $save_data, true ) ;
    } else if ( $save_data != get_post_meta( $post_id, $data_key )) {
    update_post_meta( $post_id, $data_key, $save_data ) ;
    } else if ( "" == $save_data ) {
    delete_post_meta( $post_id,$data_key) ;
    }
    }
    add_action("save_post","save_post_url");
    [/php]

    これで、カスタムフィールドのsite_url,site_titleにそれぞれ、URLとページのタイトルが保存されました。

    次に出力部分です。サイトのスクリーンショットですが、WordPress.comのAPIでスクリーンショットがとれる奴があるので、有り難く使わせて頂きます。

    [php]
    $url = post_custom("site_url");
    if( $url ){
    echo "<img src=’http://s.wordpress.com/mshots/v1/".urlencode(clean_url($url))."?w=300&h=250′ alt=” />";
    }
    [/php]

    で、サイトのスクリーンショットが取得できます。これをループ内で実行すれば良い訳です。

    これで、デザインとかHTMLをちゃんと書いてあげれば、完成です。
    デフォルトテーマに書き込んでも良いと思います。でも、『俺も有名なあの人達みたいに・・・』的な気分を味わいたいならちゃんとテーマを作った方がいいです。

    あと、検索フォームを設置するなら、タグやカテゴリーで検索できると使い勝手が良いので、Search Everything
    を導入しておくと良いと思います。

    これでみんなもあの人達みたいに・・・!って訳にはそう簡単にいかないわけですが、少なくとも自分の気になるサイトをアーカイブしていけるので、自分の情報の整理くらいには活用してもらえるのではないでしょうか?

    もし作ってみた人いたら、絡んでくれると嬉しいです。

  • Custom Post Type Permalinks 0.4.5をリリースしました。
    WordPress3.3に対応しました。
    アーカイブ周りのバグを修正しました。

    近々公式ディレクトリに登録予定です。

    最新情報はCustom Post Type Permalinksをご覧下さい。

  • 先日リリースした、カスタム投稿タイプのパーマリンクを個別に設定するプラグイン、Custom Post Type Permalinksをアップデートしました。

    2011-11-14追記:最新版はこちらCustom Post Type Permalinks

    スラッグに対応させました。

    custom-post-type-permalinks.0.3

    また、現在、WordPress3.3beta2にて、カスタム投稿のアーカイブ“/post_type/”がページが見つかりませんになってしまいます。WordPress3.2では問題なく動作してます。

    またぼちぼちアップデートしていきます。

  • カスタム投稿タイプのパーマリンクをそれぞれ設定するプラグインを作りました。
    2011-11-14追記:最新版はこちらCustom Post Type Permalinks

    Custom Post Type Permalinks 0.2.5

    2011/11/02.アーカイブのURL追加にバグがあったので修正。

    機能

    • 各投稿タイプのパーマリンクを設定
    • 各投稿タイプごとのアーカイブのURL(“exsample.org/posttype/”),日付によるアーカイブのURL(“exsample.org/posttype/2011/11/02”的な)を追加
    • wp_get_archives()のパラメータに“post_type=投稿タイプ”の追加
    • カスタム分類のパーマリンクを“/投稿タイプ/カスタム分類名/カスタム分類”に変更

    があります。

    パーマリンクの変更は、サイドバーの設定に、『カスタム投稿タイプのパーマリンク』というのが追加されるので、そこから設定します。

    一応、Custom Post Type UIでも、プラグインやfunctions.phpでカスタム投稿タイプを追加しても、動作しています。

    多言語対応等は今後またそのうち対応します。。。。。

    現在カスタムスラッグには対応していません。すみません。。。

    バグもまだあるかもしれませんが、もしあったら@Toro_Unitまでお知らせいただけるとありがたいです。

  • WordPressで投稿の画像だけを表示することはアーカイブページやトップページでよくあると思います。

    たとえばこんな感じ

    なので、それ用の関数をつくりました。
    投稿サムネイルがある場合はそれを、ない場合は記事のギャラリーに入っている一番最初の画像を表示しています。

    [php]
    function print_post_image($size = ‘thumbnail’){
    if ( has_post_thumbnail() ) {
    the_post_thumbnail($size);
    } else {
    $attachments = get_children(array(
    ‘post_parent’ => get_the_ID(),
    ‘post_type’ => ‘attachment’,
    ‘post_mime_type’ => ‘image’,
    ‘order’ => ‘DESC’
    ));

    if(!empty($attachments)){

    $img = array_shift($attachments);
    echo wp_get_attachment_image($img->ID ,$size);
    }
    }
    }
    [/php]

    the_excerpt等と一緒に使うと結構楽しいかもしれません。

  • 企業サイト等を作るとき、サブページにナビゲーションに用意することって結構あると思います。サイドバーあたりに。

    たとえば
    [html]
    <nav class="sideNav">
    <h2><a href="#">会社情報</a></h2>
    <ul>
    <li><a href="#">会社概要</a></li>
    <li><a href="#">事業内容</a></li>
    <li><a href="#">社長挨拶</a></li>
    </ul>
    </nav>
    [/html]
    みたいな感じの。

    それのWordPressでの実装です。
    [php]
    <nav class="sideNav">
    <?php
    if(is_page()){
    $rootId = array_pop(get_post_ancestors( $id ));
    if(!$rootId){
    $rootId = $id;
    }
    ?>
    <h2><a href="<?php get_permalink($rootId);?>"><?php echo get_the_title($rootId);?></a></h2>
    <ul>
    <?php wp_list_pages("title_li=&child_of=$rootId" );?>
    </ul>

    <?php
    }else {
    ?>
    <h2><a href="/news">ニュース</a></h2>
    <ul>
    <?php wp_get_archives();?>
    </ul>

    <?php
    }
    ?>
    </nav>
    [/php]

    get_post_ancestors( $id )親ページのリストが配列で出るのですが、最後の要素が一番上の階層のページなので、それをarray_popで持って来ます。
    wp_list_pagesで取得したIDの子孫のページだけ吐き出すようにしています。

  • WordPressでis_page()風味に使える、スクリプトを書きました。
    is_page()に加えて、そのページの親、更にその親要素に出現すればtureを返します。

    [php]
    function is_current_page($page = "") {
    if(is_page($page)){
    return true;
    }

    global $id;
    $parent = $id;

    do {
    $parent = get_post($parent)->post_parent;

    if(get_post($parent)->post_name == $page||get_post($parent)->ID == $page||get_post($parent)->post_title == $page){
    return true;
    }
    }
    while($parent > 0);

    return false;

    }
    [/php]

    子ページとかをよく使う情報量の多いサイトなんかはでは便利だと思います。

  • 先日リリースした、Add New Category Postをアップデートしました。
    主にJavaScript周りの修正をしています。

    @Toro_Unit Add New Category Postプラグインですが、「新規投稿を追加」ページ以外だとCurrent Menu表示部分でスクリプトエラーが出るようですのでご検証頂けますでしょうか。less than a minute ago via web Favorite Retweet Reply

    という報告をいただいていましたが、修正されていると思います。一応Mac OS X 10.6 Firefox5 とChromeで確認しています。

    @show_webさんありがとうございました。

    ダウンロード:Add New Category Post Ver.0.5

  • 2011-11-15追記:最新情報はこちらからご確認ください。Category Post

    WordPress案件でカスタム投稿にしようかカテゴリでやっつけようかって悩む時が有るのですが、
    カテゴリの方が、投稿一覧とかで全部見れたり、WP_Queryやquery_posts()とかで持ってくるとき、楽だったりしますよね。
    ただ、お客さんに『このカテゴリーにチェックしてください』とかいろいろ運用マニュアル的な解決も結構面倒だったりします。

    カテゴリーを指定して投稿画面ができたら便利かなと思って作りました。

    とりあえず、開発はWordPress3.2.1+Firefox5+MacOS X 10.6でやっています。WordPress3以降で動作はすると思います。あとでちゃんとチェックします。

    Add New Category Post

    という名前のプラグインです。
    ダウンロード:add-new-category-post

    インストール・アンインストール

    wp-content>pluginsの中に展開したファイルをアップロードしてください。アンインストールするときは、特にデーターベース等を触りませんので、無効にしてサーバーから削除するか、WordPressの管理画面から削除してください。

    機能

    管理画面のサイドメニューの投稿の“新規追加”を削除し、カテゴリーごとの新規追加を追加します。『未分類を追加』みたいな感じになります。記事の最初のスクリーンショットみたいな感じです。
    また、カテゴリ別投稿のときは、投稿画面のカテゴリー一覧も非表示にしています。

    もとからある新規追加を消したくない場合は、プラグインファイルを開いて、
    [php]
    remove_submenu_page( "edit.php", "post-new.php" );
    [/php]
    をコメントアウトしてください。

    ツッコミとかあれば頂ければ嬉しいです&助かります。

  • 自分でコピペできるように、browser判別のTipsを貼っておきます。

    PHPで判別

    [php]
    function browser_class(){
    $classes = "";
    $agent = getenv( "HTTP_USER_AGENT" );

    if(strstr($agent,"MSIE")){
    $classes .= "msie ";
    if(strstr($agent,"MSIE 6.0")) $classes .= "ie6 lt7 lt8 lt9";
    if(strstr($agent,"MSIE 7.0")) $classes .= "gt6 ie7 lt8 lt9";
    if(strstr($agent,"MSIE 8.0")) $classes .= "gt6 gt7 ie8 lt9";
    if(strstr($agent,"MSIE 9.0")) $classes .= "gt6 gt7 gt8 ie9";
    }
    else {
    $classes .= "noie ";
    if( strstr($agent,"Firefox")) {
    $classes .= "firefox gecko";
    }
    elseif( strstr($agent,"Safari")) {
    $classes .= "safari webkit";
    }
    elseif( strstr($agent,"Chrome")) {
    $classes .= "Chrome webkit";
    }
    elseif( strstr($agent,"Opera")) {
    $classes .= "opera presto";
    }
    //ここからは気休め。
    //AppleWebKit/534.30 (KHTML, like Gecko) なので先に記述
    elseif( stristr($agent,"WebKit")) {
    $classes .= "webkit";
    }
    //AppleWebKit/534.30 (KHTML, like Gecko) なので先に記述
    elseif( stristr($agent,"KHTML")) {
    $classes .= "khtml";
    }
    elseif(stristr($agent,"Gecko")) {
    $classes .= "gecko";
    }else {
    $classes .= "other";
    }
    }
    return $classes;
    }
    [/php]

    ついでにwordpressのbody_classに追加するなら、
    [php]
    function add_browser_class($classes){
    $classArr = explode(" ",browser_class());
    $return = array_merge($classes,$classArr);
    return $return
    }

    add_filter("body_class","add_browser_class");
    [/php]

    とかやればうまく行ける気がします。

    jQueryで判別

    参考:
    jQuery.supportでのブラウザ判別
    http://w3g.jp/blog/tools/jquery_browser_sniffing

    [js]
    jQuery(function($){

    $html = $("html");

    if(!$.support.checkOn && $.support.checkClone){
    $html.addClass("webkit noie");
    }else if($.support.checkOn && $.support.noCloneEvent && window.globalStorage){
    $html.addClass("firefox noie");
    }else if($.support.checkOn && $.support.noCloneEvente && !window.globalStorage){
    $html.addClass("opera noie");
    }else if(!$.support.noCloneEvent && $.support.opacity){
    $html.addClass("gt6 gt7 gt8 ie9 msie");
    }else if(!$.support.opacity){
    if(!$.support.style){
    if (typeof document.documentElement.style.maxHeight != "undefined") {
    $html.addClass("gt6 ie7 lt8 lt9 msie");
    } else {
    $html.addClass("ie6 lt7 lt8 lt9 msie");
    }
    }else{
    $html.addClass("gt6 gt7 ie8 lt9 msie");
    }
    }else{
    $html.addClass("other");
    }
    });
    [/js]

  • 学び処 立志塾 | 長野県松本市 完全1対1個別指導の学習塾です

    この度、学び処 立志塾様のウェブサイトの新規立ち上げさせて頂きました。
    細かい気遣いが売りだということだったので、サイトの方もいろいろと細かい事をしています。

    技術的なことを言うと、
    jquery hashchange eventでページ遷移は実現しています。
    サイドバーはcss3のtransitionです。やっぱり軽快ですね。
    またブログなんかはカスタム投稿やカスタム分類使ってみたり。

    松本市在住で中高生のお子さんが居らっしゃる方は是非一度ご覧くださいm(_ _)m

  • Facebookとかで”いいね!”をすると、そのページのdescriptionが表示されるようです。
    せっかくなので、記事ごとにdescriptionを設定しようと思い、
    WordPressワードプレスで記事の概要をdescriptionに設定する方法
    のコードをまんま、コピーアンドペーストしたのですが、シンタックスハイライターを等でショートコードを使っていると、それがそのまま出力されてちょっと切ない事になってしまいました。

    なので、それに対処してみました。

    [php]
    <?php if ( is_single() ) { // 単独記事ページの場合 ?>
    <?php if ($post->post_excerpt){ ?>
    <meta name="description" content="<? echo $post->post_excerpt; ?>" />
    <?php } else {
    $summary = strip_tags($post->post_content);
    $summary = preg_replace("/\[[a-z,\/]*\]|\n|\r/", "", $summary);
    $summary = mb_substr($summary, 0, 80). "…"; ?>
    <meta name="description" content="<?php echo $summary; ?>" />
    <?php } ?>
    <?php } else { // 単独記事ページ以外の場合 ?>
    <meta name="description" content="<?php bloginfo(‘description’); ?>" />
    <? } ?>

    [/php]

    str_replaceだったのを、preg_replaceにして、ショートコード全般と、改行を取り去るように書き換えただけです。

    正規表現を少し覚えると、色々悪さができて楽しいですね。