wordpressが3.0になって、デフォルトのテーマ「Twenty Ten」がなんかイケてる。
特にメニューや背景、ヘッダをwordpress上で変更出来るのが素敵。
ブログやりたい!でも広告ウザい!とか言う人は、php分からなくてもちょっと頑張ったら作れるよ!
で、新しくメニュー入りのテーマを作ろうと思ったが、ちょっとはまったのでメモ。
自作テーマにメニューをメニューを追加する場合、表示させたい場所に
<?php wp_nav_menu(); ?>
を追加。そしてfunctions.phpに
add_theme_support( 'nav-menus' );
を追加する。
のだが、実際にこれだけ追加した場合、「外観」に「メニュー」の設定項目が表示されない事がある。
サイト自体にはメニューは表示されるけど、編集できない。Oh!
原因は、テーマがウィジェットに対応していないから。
つまり、functions.phpに
if ( function_exists('register_sidebar') ) register_sidebar();
とウィジェットに対応させると、外観メニュー項目が表示されるようになる。
ちなみに、サイドバー(sidebar.php)を作らなくても表示される。
やりたいこと
「本文に特定の文字列が含まれている場合に表示」
<?php $pregA="img"; $pregB= get_the_content(); if(preg_match("/[$pregA]/",$pregB)): ?> <p>表示したい文字列</p> <?php endif ;?>
・$pregAに検索したい文字列(例:img)
・get_the_content()を使って、投稿本文を$pregBに代入
・preg_match関数を使ってマッチング
・投稿本文内に検索文字列「img」があった場合は表示
preg_match関数(正規表現を使って文字列内を検索する)
http://php.net/manual/ja/function.preg-match.php
get_the_content()
the_content()では不可能な、本文に修正加えたり、代入する場合などに使える。
以下、本文に改行を加えて表示する方法。
<?php $content = get_the_content(); $content = preg_replace("/\n/","<br />",$content); //ソース上で改行(\n)がある場合は、テキストでも改行を加える echo $content; ?>
こんばんわ、昨晩の帰宅が深夜で携帯を車に忘れてきたのですが、今朝取りに行っても一件のメールも入っていませんでした。
そんなこと・・・分かっていたのに・・・。やっちんです。
サイトが重い。
当サイトはwordpressというソフトを使ってブログを作っておりまして。
とても便利なソフトなんですが、反面、便利だからといってカスタマイズしまくると、その文動作が重くなる。
特にこのサイトではアホみたいに色んなものを入れてるもんだから、非常に重い。
たとえて言うならガンダムにビームライフルとバズーカとガンダムハンマーを持って戦っているようなものです。
(ガンダムハンマーはテレビ放映時のスポンサーの玩具メーカーが要求したものなんだぜ。)
で、デザインのせいで重いのかどうか検証したくなったので、極力シンプルなデザインのテーマを作ってみました。
画像、javascript一切無し。純粋にcssのみでのデザイン。
必要以上にDIVを使わない、けどなんとなくヘッダとフッタがグラデーションっぽく。
firefoxやsafariはこんな感じで見えると思います。
クソッタレIEやOperaなんかは、タイトルの角がcssでは再現できないので、
こんな感じになってると思います。
まだpictureなどはキチンと出来てないけど、数日これでチェックするので、なんか崩れてたり不具合があったらおせーてね!
(プラグイン切ってないからそない動作はあまり軽くなってないと思うけど)
サイドバーに「最近のコメント」を付けたいのだが、ウィジェットを使用するとなんかイマイチ拡張性に乏しい・・・。
プラグインに頼るのもなんだか悲しい・・・ので作る。
偉大なる先人である、コチラのサイトを参考に。
正直SQLはからきし分からないのだが、一応
<?php global $wpdb; $sql = "SELECT DISTINCT ID, post_password, comment_ID, comment_post_ID, comment_author, comment_approved, comment_type,comment_author_url, SUBSTRING(post_title,1,12) AS com_excerpt, SUBSTRING(comment_date,1,10) AS com_date FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID = $wpdb->posts.ID) WHERE comment_approved = '1' AND comment_type = '' AND post_password = '' ORDER BY comment_date_gmt DESC LIMIT 5"; $comments = $wpdb->get_results($sql); $output .='<div>最近のコメンティーヌ</div>'; $output .= "\n<ul>"; foreach ($comments as $comment) { $output .= "\n<li>". "<a href=\"" . get_permalink($comment->ID) . "#comments"."\" title=\"". strip_tags($comment->com_excerpt) ."-". $comment->comment_ID . "\">" . strip_tags($comment->com_excerpt) ."</a>...に<br /> ". "<a href=\"" . get_permalink($comment->ID) . "#comment-" . $comment->comment_ID . "\" title=\"". strip_tags($comment->comment_author) . "-" . $comment->comment_ID . "\">".strip_tags($comment->comment_author) ." </a>より <span class=\"side-comment-date\">(" . strip_tags($comment->com_date) . ")</span></li>"; } $output .= "\n</ul>"; echo $output; ?>
細かい事は分からないが、2、3行目でデータベースに取りに行くテーブルを選択するみたい。
今回は「記事タイトル(post_title)」と「投稿時間(comment_date)」を文字数指定して取り出したいので、
SUBSTRING(post_title,1,12) AS com_excerpt
(post_titleというデータを1文字目から12文字目まで取り出して、com_excerptという名前にする。)
SUBSTRING(comment_date,1,10) AS com_date
(comment_dateを1文字目から10文字目まで取り出して、com_dateという名前にする。)
と記述。これを行わないでそのまま取り出したら、例えば記事タイトル(comment_date)なら
「森の妖精さんの気まぐれキノコシチュー」
と出てくる。これを10文字まで取り出す事で、
「森の妖精さんの気まぐ...」
と出力される。(...は後付けだけど)
テーブルについてはコデックス参照。
そして12行目から$outputを使ってタグを出力する。
頑張って整形する。
出来たら、サイドバーに入れる。
サイドバーがごちゃごちゃしてストレスで吐きそうな人は、別ファイルにして読み込むか、functions.phpに記入するとすっきりする。
・別ファイルにして読み込む
適当な名前(ここではsidebar-comments.php)にして、テーマフォルダにぶち込み、挿入したい部分に
<?php include ( TEMPLATEPATH . '/sidebar-comments.php'); ?>
と書く。
・ファンクションに入れる
functions.phpの中でファンクション名を与え(ここではget_sidebar_recent_c)、
function get_sidebar_recent_c($initial = true) { /* ここにさっきのソースを記述(モチロン<?php~~?>抜いて)*/ }
と書く。そして挿入したい部分に
<?php get_sidebar_recent_c(); ?>
これで南斗水鳥拳ばりに綺麗になった。
wordpressにAjaxでメールフォームが作られる素敵プラグインcontactform7だが、初期状態では全てのページでjs,cssファイルが読み込まれる。
contactform7を使うページが限られていて、他のページで読み込まれるのが重い!とストレスで脱衣しそうな人は、止めれば良い。
説明はコチラに載っているが、若干トラブったので、補足する。
1、contactform7のjs,cssを読み込ませない。
まずwp-config.phpを開いて、
define ('WPCF7_LOAD_JS', false);
を挿入する。この時、
// 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。
というコメントより上に挿入しないと適用されない。
2、特定のページでのみcontactform7を動作させる。
例えばcontactform7を使いたいページのスラッグが"mail"だった場合、
<?php wp_head(); ?>より前に
<?php if (is_page('mail')) { / ?> <?php wpcf7_enqueue_scripts(); wpcf7_enqueue_styles(); ?> <?php } ?>
上記を読み込む。
こうしてやる事でスラッグ"mail"のページでのみ、contactform7のjsやcssが読み込まれる。
仮にカテゴリIDが23だった場合は、
<?php if (is_category('23')) { / ?> <?php wpcf7_enqueue_scripts(); wpcf7_enqueue_styles(); ?> <?php } ?>