データベースに接続できません

TORIYAMAHONPOS WordPressのまめ知識

  • 表示条件に複数カテゴリを指定する

    一覧の条件を指定するには、ループの直前にquery_postsでカテゴリや表示数などの条件を加えることができる。カテゴリ”ニュース”を指定するには、
    [sourcecode language=’php’]
    query_posts($query_string .”&category_name=news”);
    [/sourcecode]
    というようにスラッグで指定するといいのだが、スラッグはひとつしか指定することができない。複数(たとえば”英語”の”ニュース”)を指定する場合には、
    [sourcecode language=’php’]
    query_posts($query_string .”&cat=” .get_category_by_slug(‘news’)->term_id) .”,” .&cat=” .get_category_by_slug(‘english’)->term_id));
    [/sourcecode]
    というようにterm_idで指定するしかない。この場合はカテゴリが”英語”または”ニュース”の記事が表示される。両方の条件を満たす記事を表示する場合には、category__andというパラメータを使う。
    [sourcecode language=’php’]
    query_posts(array(‘category__and’=>array(get_category_by_slug(‘news’)->term_id, get_category_by_slug(‘english’)->term_id)));
    [/sourcecode]

    これではまだ”ニュース”の子孫カテゴリが拾ってこれない。”ニュース”の子孫と”英語”の両方を満たす記事を表示する場合は、ちょっとまわりくどいが以下の記述で実現した。
    [sourcecode language=’php’]
    query_posts(array(‘category_name’=>’news’, ‘category__and’=>array(get_category_by_slug(‘english’)->term_id),’showposts’=>5));
    [/sourcecode]

    もうちょっとスマートな方法はないかな?

  • 投稿画面でカテゴリーをソートしない

    管理画面の投稿画面にカテゴリーを選択するリストボックスがあり、いったんチェックをつけたカテゴリーは次回から上に表示される。CMSとして利用する場合はカテゴリーに2、3の階層を持たせることがほとんどなので、これをやられるとあとからカテゴリーの階層がわからなくなって困る。
    この並べ替えをしない方法。

    /wp-admin/includes/meta-boxes.php の
    function post_categories_meta_box() から
    wp_category_checklist() を呼ぶ箇所で、
    [sourcecode language=’php’]
    ID, false, false, $popular_ids) ?>
    [/sourcecode]
    となっているところに、引数を追加するとよい。
    [sourcecode language=’php’]
    ID, false, false, $popular_ids, ”, false) ?>
    [/sourcecode]

    6番目のパラメータがチェックされているカテゴリーを上にもってくるかどうかのフラグである。デフォルトでtrueとなっているのを、falseに指定する。5番目のパラメータは不明だが、デフォルトのNULLを指定しておく。こうすることで、カテゴリーのリストが常に同じ順番で表示される。

    このようにWordPressの本体コードを修正すると、バージョンアップ時に上書きされてしまうのでおすすめできない。パラメータがあるということは、どこかに設定画面があるのだろうか?
    とりあえず自分用にメモ。

  • body用のテンプレートタグ body_class

    WordPress 2.8よりbody 要素用の新テンプレートタグ body_class が加わっている。テーマで以下のように書くことで、

    [sourcecode language=’php’]
    >
    [/sourcecode]

    homeの場合は、<body class=”home blog”>
    singleページの場合は、<body class=”single postid-1″>

    というように表示しているページごとにクラスが指定される。これによってページごとのスタイルを指定したり、JavaScriptでメニューの状態を変更したりすることができる。
    今までは is_single()ならclass=”single”・・・と必要に応じて自分で指定していたので、いつのまにかとても便利になっていた。defaultテンプレートを見ていて気がついた。このテーマもちゃんとバージョンアップしてるんだな。たまには見直さなければ。

    属性の一覧は、テンプレートタグ/body class – WordPress Codex 日本語版を参照。

  • テーマに必要なファイル

    WordPressでは、テーマによって構成ファイルが異なる。
    最小限で必要なファイルは以下の2つだ。
    ・style.css
    ・index.css

    これだけ用意しておけは、それなりに表示される。
    あとは必要に応じてカスタマイズしながら増やしていけばよい。

  • アーカイブページを作成するには

    アーカイブページを作成する際の小技。まずarchivesというページを作成する。そのさい内容は空白にしておく。そして、page-archives.phpというテンプレートファイルを用意する。archivesという名前のページのテンプレート、というような意味なのだろうか?月別アーカイブを表示するには、このテンプレートに以下を記述しておく。

    [sourcecode language=’php’]

    月別アーカイブ

    ‘monthly’, ‘limit’ => ”, ‘format’ => ‘html’, ‘before’ => ”, ‘after’ => ”, ‘show_post_count’ => true);
    echo ‘

      ‘;
      wp_get_archives($defaults);
      echo ‘

    ‘;?>


    [/sourcecode]

    この場合アーカイブページのURLは、
    ブログのURL/archives/
    となる。

  • リビジョン管理を無効にする

    最近のWordPressに搭載されいているリビジョン管理は、編集履歴を残す機能である。CMSとして複数人数で利用している場合には便利なものの、個人ブログで必要にかられることはあまりない。編集履歴はMySQL上でsb_3_postsとして保存されるため、投稿IDがどんどん増えていくのも気になる。

    このリビジョン管理を無効にすることができる。wp-config.phpに以下を記述しておくとよい。

    [sourcecode language=’php’]
    define(‘WP_POST_REVISIONS’,  false);
    [/sourcecode]

    記述する位置は、「// 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。」の直前あたりだ。第2引数がfalseの場合はリビジョンが無効となる。ここに数値を指定すると、履歴を残す世代を指定することになる。

  • Feedをカスタマイズ

    WordPressが自動で出力してくれるFeedは、全文か抜粋かを選ぶだけのシンプルなものとなっている。当ブログではこれで十分であるが、フォトログだったらやはりFeedに画像なんかを表示したいものだ。いろいろ調べているうちに、Feedの内容はテーマやプラグインでカスタマイズできることが分かった。

    以下はテーマでatomの出力内容を変更する例。

    [sourcecode language=’php’]
    remove_action(‘do_feed_atom’, ‘do_feed_atom’, 10, 1);
    automatic_feed_links(false);

    function custom_feed_atom( $for_comments ) {
    $template_file = ‘/feed-atom’ . ( $for_comments ? ‘-comments’ : ” ) . ‘.php’;
    $template_file = ( file_exists( get_template_directory() . $template_file )
    ? get_template_directory()
    : ABSPATH . WPINC
    ) . $template_file;
    load_template( $template_file );
    }
    add_action(‘do_feed_atom’, ‘custom_feed_atom’, 10, 1);

    [/sourcecode]

    まずfunctions.phpで、本来のatom出力である”do_feed_atom”をremove_actionで停止し、独自の関数をadd_actionで再定義する。
    次に、/wp-includes/feed-atom.phpを同じファイル名のままテーマフォルダにコピーする。中身を見るとFeedを出力するテンプレートとなっている。Feedの本文はthe_excerpt_rss();前後になるので、このあたりに画像を表示するなり手を加えるとよい。
    さらに、同じ処理をrdf、rss、rss2に関しても行う。

  • プラグイン用のテーブルを作成するには

    WordPressをインストールする際にMySQLに作成されるテーブルのほかに、自作プラグインでもテーブルを作成することができる。アクションフックのregister_activation_hookを定義しておくとプラグインが有効になった際に関数が呼ばれるので、ここでテーブルを作成する。テーブル名にはWordPressの接頭辞を使用すること。
    以下は、wp_sampleというテーブルを作成する例。

    [sourcecode language=’php’]
    function myActivation() {

    global $wpdb;

    $table_name = $wpdb->prefix . “sample”;
    if($wpdb->get_var(“show tables like ‘$table_name’”) != $table_name) {

    $sql = “create table ” .$table_name .” (
    ID bigint not null auto_increment,
    name varchar(64) NOT NULL,
    furigana varchar(64) default NULL,
    url varchar(64) default NULL,
    primary key(ID)
    )”;

    $results = $wpdb->query($sql);
    }
    }

    register_activation_hook(__FILE__, ‘myActivation’);
    [/sourcecode]

    プラグインが無効化された際の処理は以下を使用する。
    [sourcecode language=’php’]
    register_deactivation_hook(__FILE__, ‘myDeactivation_’);
    [/sourcecode]

  • ショートコードの作りかた

    ショートコードとは、記事中に記述することで実行させるプラグインのことだ。有名なショートコードのプラグインに、ソースコードを表示するためにここでも使っている「SyntaxHighlighter Plus」がある。

    ショートコードは以下のように記事中に記述する。
    [hello color=”red”]ほにゃらら[/hello]

    プラグインでは、add_shortcodeで定義した関数を用意する。下の例では、赤い文字で”ほにゃらら”と表示する。この場合の出力はechoではなく、returnとすることに注意したい。
    $attsの引数で、属性値を受け取ることもできる。

    [sourcecode language=’php’]
    function showhello($atts, $content) {
    extract( shortcode_atts( array(‘color’ => ”), $atts ));
    return ‘

    ‘ .$content .’

    ‘;
    }

    add_shortcode(‘hello’, ‘showhello’);
    [/sourcecode]

    ショートコードは記事中だけでなく、テーマで使用することもできる。テーマで使用する場合は、 do_shortcode()を使う。
    [sourcecode language=’php’]

    [/sourcecode]

  • 画像がアップロードできない

    WordPress2.8.4にアップデートした後にひっかかったのは、画像ファイルのアップロードだ。
    投稿画面で「画像の追加」アイコンをクリックしてもウンともスンともいわなくなってしまった。よく見るとFireFoxでJavaScriptのエラーが大量に出ている。とりあえずプラグインをひとつづつ無効にしていきながら、Simple Tagsでひっかかっていることまでつきとめた。
    Simple Tagsを最新バージョンにアップデートしてみるも直らない。このような有名なプラグインが最新バージョンに対応していないはずはないと思った。そこでふと思いついてFireFoxをIEに変えると、問題ないことが分かった。FireFoxがだめなのか?と2、3日はブログの更新をIEで行っていた。またふと思いついて、FireFoxを最新バージョンにしたら正常に戻った。

    何事も最新バージョンに保たないと思いどおりにいかないものだ。