Personal tools
You are here: Home KtJ's Blog WordPress設定メモ(自分用)
« August 2017 »
Su Mo Tu We Th Fr Sa
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
 

WordPress設定メモ(自分用)

by ktj posted at 2012-03-25 00:00 last modified 2017-05-09 21:26

現在Ploneで構築しているこのコンテンツをWordPressに書き直そうとしている最中なのだが、まずその前にWordPress自体に手を加えなきゃいけないのでそのやり方をわすれないようメモっておく。テーマはTwenty Elevenベースで。

ReStructuredText対応

自作のプラグインをWPのプラグインフォルダに入れる。そして、テーマのfunctions.phpに下記のコードを追加する。

function priority_change()
{
  remove_filter( 'the_content', 'do_shortcode', 11 );
  add_filter('the_content', 'do_shortcode', 1);
}
add_action('init', 'priority_change');

フロントページの設定

サイトの構成上、フロントページは「直近のブログ投稿一覧」ではなく、静的なウェルカムページ+専用のサイドバー(更新履歴、コメント履歴とメタのみ)としたい。しかし、サイドバーのテンプレート(sidebar-page.php)をそのまま使うと下記の問題がある。

  1. コメント入力欄が表示されてしまう。フロントページは極力シンプルであるべきだと思うのでコメント入力欄は冗長
  2. sidebar-page.phpはページタイトルを見出しとして出力してしまうが、フロントページでは不要
  3. サイドバーの内容がブログと同じになってしまう

上記1. 2.はフロントページ専用のテンプレートページを使えば解決しそう、と思ったのだが、このテーマはどうもcssがテンプレート名決め打ちで処理を切り分けているようで、期待通りのレイアウトになってくれない(具体的には、サイドバーがコンテンツの横に綺麗にフロートしてくれない)。ということで、sidebar-page.phpを下記のようにいじってみた。

<?php
/**
 * Template Name: Sidebar Template
 * Description: A Page Template that adds a sidebar to pages
 *
 * @package WordPress
 * @subpackage Twenty_Eleven
 * @since Twenty Eleven 1.0
 */

get_header(); ?>

              <div id="primary">
                      <div id="content" role="main">

                              <?php while ( have_posts() ) : the_post(); ?>

                                      <?php if (is_front_page()) : ?>
                                              <?php the_content(); ?>
                                      <?php else : ?>
                                              <?php get_template_part( 'content', 'page' ); ?>
                                              <?php comments_template( '', true ); ?>
                                      <?php endif; ?>

                              <?php endwhile; // end of the loop. ?>

                      </div><!-- #content -->
              </div><!-- #primary -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>

つまり、そのページがフロントページかどうかを is_front_page() 関数の出力で切り分けて、フロントページなら ``the_content()`` 関数でタイトルなしのコンテンツを出力、それ以外の場合はタイトルありのコンテンツとコメントを出力(これは元々のsidebar-page.phpのデフォルトの動作)、としている。

あとは、3.の問題をどうするかだけど、たぶんsidebar.php(get_sidebar() 関数から呼び出される)をいじる必要があると思われ。

ロケール設定

英語版WordPressを入れたんで、出力されるHTMLソースの言語がen-USとなってしまう。エンコーディングがUTF-8なので日本語も扱えるが、ブラウザの仕様によっては漢字やかなが中国語や韓国語のフォントで表示されてしまう可能性があり、これは見栄え的にNG(なお、中国語や韓国語のフォントセットにはかなや日本語の約物も一通り収録されている)。で、日本語版WordPressにすればいいのだろうが、一応英語版のコンテンツもあるのでサイドバーの見出しなんかが日本語になってしまうというのもちと困る(Ploneだとブラウザの言語設定に応じて適宜調整してくれる)。

ということで、英語版WordPressを使いつつロケールだけjaにするというのがよさそう。これは、wp-config.phpでWPLANGをjaに設定すればOKみたい(対応する言語用のmoファイルが泣ければメッセージ類は英語になる模様)。

ヘッダ部分のレイアウト

ヘッダ(画面上部)にはテキストのサイト名は入れず、画像のみとする。その場合、下記のような問題がある。

  1. 画像上端に枠線が入るのはデザイン上好みじゃない
  2. ナビゲーションメニューには、各カテゴリ(ブログ内のカテゴリじゃなく静的コンテンツを含めたより大きな枠組みとしてのカテゴリ)のメニューページへのリンクを置くが、メニューに「ブログ」メニューを置いた場合、ブログの記事を単独表示しているときにも、Ploneと同様メニューの当該カテゴリ部分を強調表示させたい

これらの問題を解決するためには、style.cssをいじる。1.の問題は、ヘッダの画像(+サイト名を示すテキスト)を示すブロック(id=branding)に割り当てられている枠線表示を下記の用に書き換える。

#branding {
      border-top: 0;
      padding-bottom: 10px;
      position: relative;
      z-index: 9999;
}

2.の問題だが、ナビゲーションメニューの各項目には、表示されているコンテンツの親子関係が分かるようにclassが割り当てられている。メニュー項目が表示されているコンテンツが静的コンテンツの場合、そのコンテンツがナビゲーションメニューのメニュー項目の子孫である場合、当該メニュー項目にはクラス current_page_ansester が割り当てられる。で、style.cssでは current_page_ansester クラスが割り当てられた要素をボールド表示するようになっている。

ところが、コンテンツがブログ記事の場合、「ブログ」を示すメニュー項目には current_page_ansester ではなく、メニュー項目が一世代前の親であることを示す current_page_parent のみが設定されている(静的コンテンツの場合は双方が設定されている)。そこで、 current_page_parent もハイライト表示されるよう、style.cssに下記の変更を加えた。

#access .current-menu-item > a,
#access .current-menu-ancestor > a,
#access .current_page_item > a,
#access .current_page_parent > a,
#access .current_page_ancestor > a {
      font-weight: bold;
}
Category(s)
BSD and Linux

Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: