ITTOOL

wordpressでログインを必須にする方法

CATEGORIES WordPress, その他by.a.takeuchi1 Comments2009.11.12

社内用だったり、会員制などの用途でWordPressを利用する場合、登録済みのユーザのみにコンテンツを表示させたい。なんてことはないでしょうか?
実際、調べてみても標準の管理画面でそんな機能はないし、プラグインも見あたりません。(調べ方が悪いのかも。。。)

と、いうことで力業ですが、WP2.8系のプログラムソースをちょっといじって実現する方法をまとめます。

利用するのは、WP標準関数群のis_user_logged_in()auth_redirect()
簡単に言うと、アクセスされたときにログインしているかどうかを判定して、ログインしていない場合は、管理画面のユーザ認証画面にリダイレクトするというもの。

では、実際にどこを書き換えればよいのか見てみましょう。
WordPressのプログラムを見てみるとルートディレクトリに”wp-blog-header.php“があります。中を覗いてみると次のようになっています。

if ( !isset($wp_did_header) ) {
$wp_did_header = true;
require_once( dirname(__FILE__) . ‘/wp-load.php’ );

wp();
require_once( ABSPATH . WPINC . ‘/template-loader.php’ );
}

そこで、ここに赤字で書いてある部分を追記します。

if ( !isset($wp_did_header) ) {
$wp_did_header = true;
require_once( dirname(__FILE__) . ‘/wp-load.php’ );

if (is_user_logged_in()){
}
else {
auth_redirect();
};

wp();
require_once( ABSPATH . WPINC . ‘/template-loader.php’ );
}

あとは、保存して、ファイルを差し替えるだけ!!

※今回の内容はプログラムを書き換える必要がありますので自己責任でバックアップをしてください。

WordPressをチューニング SQL表示プラグイン

CATEGORIES WordPressby.a.takeuchi11 Comments2009.11.11

唐突ですが、Wordpressって重いですよね。機能はしっかりしてるし、拡張性もあるんだけど、性能だけはあまり評判がよくありません。こういうWebアプリで、性能が悪くなる原因はたいていDBアクセスにあります。ということで、どんなクエリを実行したか一目で確認できるプラグインを作ってみました。このプラグインを組み込めば、WordPressの実行に対する理解が進み、性能改善のヒントになると思います。

ダウンロード: db_logger

このプラグインを組み込んだあと、GETで db_logger=true を渡すと、WordPressの末尾にDBの実行履歴が表示されます。その後は、db_logger=falseを渡すまでデバックモードを継続します。このブログであれば http://blog.elearning.co.jp/?db_logger=true にアクセスすると、ログの表示が始まり、 http://blog.elearning.co.jp/?db_logger=false にアクセスするとログの表示がとまります。

※SQLの実行履歴を公開すると、セキュリティーホールを発見しやすくなってしまうので、”db_logger”の部分は変更できるようにしてあります。($logkey = ‘db_logger’; の部分を書き換える)。公開サーバに組み込む場合は必ずこの値を変更するようにしてください。

<?
/*
Plugin Name: DB Logger
Plugin URI: http://php7.jp
Description:
Version: -1
Author: よういちろう
Author URI: http://php7.jp
*/
$logkey = ‘db_logger’;
function db_logger($query){
$GLOBALS[‘query’][] = $query;
return $query;
}
function show_db_log(){
echo ‘<table border=1 bgcolor=white>’;
foreach($GLOBALS[‘query’] as $query)echo ‘<tr><td align=left>’.$query.'</td></tr>’;
echo ‘</table>’;
}
if(isset($_GET[$logkey])){
if($_GET[$logkey] == ‘true’){
$_SESSION[$logkey] = true;
}else{
unset($_SESSION[$logkey]);
}
}
if(isset($_SESSION[$logkey])){
add_filter (‘query’, ‘db_logger’);
add_action (‘shutdown’, ‘show_db_log’);
}

WordPressのアーカイブページでSEO

CATEGORIES WordPressby.a.takeuchi8 Comments2009.11.10

このブログは、WordPressのinovというテンプレートを使って作成していますが、タグに対するアーカイブと、カテゴリに対するアーカイブが、単なる記事の羅列になっていて寂しかったので、少し改良してみました。下記設定例のヘッダー部分をご覧ください。WordPressでは、カテゴリやタグに対して説明(Description)をつけることができるので、その内容をタグアーカーブ、カテゴリアーカイブの先頭に表示しています。カテゴリやタグのページは特定キーワードに対する属性が強いため、これらのページからの固定リンクは、SEOに有効だと思います。

設定例
カテゴリ: PPT2Flash http://blog.elearning.co.jp/?cat=54
タグ: TOEFL http://blog.elearning.co.jp/?tag=toefl

ソースコード(archive.php)

if (is_category()) {
//printf( __(‘Archive for the &#8216;%1$s&#8217; Category’, ‘inove’), single_cat_title(”, false) );
$cat = get_category($_GET[‘cat’]);
echo $cat->description;
} elseif (is_tag()) {
//printf( __(‘Posts Tagged &#8216;%1$s&#8217;’, ‘inove’), single_tag_title(”, false) );
$tag = get_tag($_GET[‘tag’]);
$tag = get_term_by( ‘name’, $_GET[‘tag’],  ‘post_tag’ );
echo $tag->description;

この変更は、archiveページがあれば、ほとんどのwordpressテンプレートに適用可能だと思います。

新着投稿の一覧を記事内に表示

CATEGORIES WordPressby.a.takeuchi1 Comments2009.11.09

新着投稿の一覧を記事内に表示するプラグインを前回作成したが、日付が表示されないと、いつの投稿かわからないと指摘されたので、日付を表示されるように改良してみた。

ダウンロード: entrylist

プラグインをアップロード、アクティベート後、投稿やページ内に[ [entrylist] ]という表記があれば、新着記事の一覧を表示します。

使用例

ソースコード

<?php
/*
Plugin Name: エントリーリストつくーる
Plugin URI: http://php7.jp
Description: 新着10件のエントリーリストを作成します。
Version: 1
Author: よういちろう
Author URI: http://php7.jp
*/

function entrylist($str){
if(strpos($str, ‘[[entrylist’) === false)return $str;
$posts = get_posts(‘numberposts=10’);
$entrylist = ”;
if($posts){
foreach($posts as $post){
$entrylist.= ‘<div class=”entry-link”><a href=”?p=’.$post->ID.'”>’.str_replace(‘-‘,’/’,array_shift(explode(‘ ‘,$post->post_date))).’ ‘.$post->post_title.'</a></div>’.chr(10);
}
}
$entrylist = ‘<div class=”entrylist_block”>’.$entrylist.'</div>’;
return str_replace(‘[ [entrylist] ]’, $entrylist, $str);
}

WordPressの投稿者ページをカスタマイズ

CATEGORIES WordPressby.a.takeuchi9 Comments2009.11.08

WordPressの投稿者毎のアーカイブページをカスタマイズしてみました。

WordPressには投稿者ごとのアーカイブページがあるのですが、今使っているテンプレートでは、ヘッダー部分に「投稿者ごとのアーカイブ」とだけ表示されていて、殺風景だったので、名前と、自己紹介が表示されるようにしてみました。この修正は、Archive.phpが存在するテンプレートだったら、そのまま適用できると思いますので、どうぞお試しください。

※登録ユーザは信頼できるという前提で、内容をエスケープせずそのまま表示しておりますので、ご注意ください。

修正前(archive.php)

} elseif (is_author()) {
_e(‘Author Archive’, ‘inove’);

修正後(archive.php)

} elseif (is_author()) {
echo get_usermeta($_GET[‘author’],’nickname’).’ のアーカイブ<br>’;//get_usermetadataでユーザ情報を取得。
echo get_usermeta($_GET[‘author’],’description’);
// _e(‘Author Archive’, ‘inove’);

WordPressで前後ページにリンクを張る方法

CATEGORIES WordPressby.a.takeuchi5 Comments2009.11.05

WordPressを使っていて、前後のページへのナビゲーションに困ったことはありませんか?PPT2Flashのページに埋め込みたかったのですが、なかなかよいプラグインが見つからなかったので、自作しちゃいました。前回プラグインを作成したエントリーリストつくーるでは、add_shortcodeを知らなかったので、str_replaceで強引にタグ置換してましたが、今回はadd_shortcodeつかって、それっぽく、仕上げてみました。

add_shortcodeを使えば、簡単にタグを作れることがわかったのが収穫です。ほしい機能がみつからなくても、簡単にプラグインが作れる。それがWordpressのいいところですね。

使用例

ppt2flash

ppt2flash

プラグインのダウンロード: prev_next

プログラム概要

  • get_prev_next
    現在のページの前後のインデックスを確認し、あればそのページを、なければfalseを返します。
  • short_code_next
    [ prev-page ]を置換するためのHTMLを生成。
  • short_code_prev
    [ next-page ]を置換するためのHTMLを生成。
  • prev_next_prepender
    [ prev-page ][ next-page ]を、記事の先頭に付加します。

ソースコード

<?php
/*
Plugin Name: prev_next
Plugin URI: http://blog.elearning.co.jp
Description: Link to the previous page and the next page
Version: 1
Author: y.nishimura
Author URI: http://blog.elearning.co.jp
*/

/**
* this function returns previous page and next page
* if not exist, return false.
*/
function get_prev_next(){
static $pageArray; // for performance enhancement
if(!isset($pageArray))$pageArray = get_pages(‘sort_column=menu_order,post_title’);
foreach($pageArray as $page)$idArray[] = $page->ID;
$pos = array_search(get_the_ID(), $idArray);
$ret[‘prev’] = isset($pageArray[$pos – 1]) ? $pageArray[$pos – 1] : false;
$ret[‘next’] = isset($pageArray[$pos + 1]) ? $pageArray[$pos + 1] : false;
return $ret;
}

/* define shortcode [prev-page] and [next-page] */
function short_code_next(){
$prev_next = get_prev_next();
$next = $prev_next[‘next’];
if($next)return ‘<a href=”‘.get_page_link($next->ID).'”>’.htmlentities($next->post_title, ENT_QUOTES, ‘utf-8′).’ »</a>’;
}
function short_code_prev(){
$prev_next = get_prev_next();
$prev = $prev_next[‘prev’];
if($prev)return ‘<a href=”‘.get_page_link($prev->ID).'”>« ‘.htmlentities($prev->post_title, ENT_QUOTES, ‘utf-8′).'</a>’;
}
add_shortcode(‘prev-page’, ‘short_code_prev’);
add_shortcode(‘next-page’, ‘short_code_next’);

/* prepend link-unit to the “pages” (not to posts)  */
function prev_next_prepender($content) {
if(is_page())$content = ‘<div><div style=”float:left”>[ prev-page ]</div> <div style=”float:right”>[ next-page ]</div></div><br/>’.$content;
return $content;
}
add_filter ( “the_content”, ‘prev_next_prepender’);
?>

WordPressで記事内に子ページを表示する方法

CATEGORIES WordPressby.a.takeuchi8 Comments2009.11.04

WordPressの”ページ”を使ってサイトを構築する際、子ページの一覧を表示したいことってありませんか?そんな時には、WP Js List Pages Shortcodesがお勧め。本文中に、 [child-pages] と書くだけで、子記事の一覧が表示されます。

でも、全ページに、タグを埋めるって面倒ですよね。

そこで、タグ埋め込みプラグイン(ダウンロード: child_pages_appender)を作ってみました。このプラグインをインストールすると、全ページの末尾に[child-pages]と埋め込まれ、子ページのリストが表示されます。

child_pages_appender のソースコード

<?php
/*
Plugin Name: child_pages_appender
Plugin URI: http://blog.elearning.co.jp/
Description: Append [child_pages] to the buttom
Version: 1
Author: KiBAN International
Author URI: http://blog.elearning.co.jp/
*/

function child_pages_appender($content) {
return $content.'[child-pages]’;
}
add_filter ( ‘the_content’, ‘child_pages_appender’);

とっても単純なプラグインですね。Wordpressのプラグインを今までに作ったことがない方も、この機会にぜひ挑戦していただければと思います。

twitterが大流行しているとのことで、試験的にいろいろ使ってみているが、私自身は、まだ、その有効的な使い方が分からない。skypeを初めて使ったときのような衝撃は、まったくない。まして本業であるeラーニングにどのように結びつけて利用すればいいのか。サポートスタッフにもアカウントをとってもらって、試験的に利用してみたい。

▲twitterは、Blog(Wordpress)に簡単に貼り付けできることは分かったが、、、

▲twitterは、Blog(Wordpress)に簡単に貼り付けできることは分かったが、、、

いろいろ試行錯誤の中、このBlogに試験的に貼り付けてみた。貼り付けは、とても簡単。(そのうち外してしまうような気もするが。)

 

フォローする人を探したり、フォローしてくれた人の内容を見ている。使い方を模索中。検索キーワードで、eラーニングを入れると、「eラーニング終了なう」なんて書き込みや、教材のつまらなさが、つぶやかれていることが分かった。また、いろいろなeラーニングのサービスやプロダクトを作っている人も、つぶやいていることが分かった。

十分時間があれば良いのだが、こまぎれな時間を有効活用するのが、twitterの使い方の本質か。はたして、有効的な使い方を見つけられるのか、、、。週末ですので、eラーニングとは、関係ないネタで失礼しました。

  • 製品・サービス
    PC、iPhone対応のeラーニングシステム。20名まで無料でASPサービスを利用できます
    PC、iPhone対応のeラーニング学習管理システム(LMS)【SmartBrain】
    http://smartbrain.info/
    PC、iPhone対応のeラーニングシステム。ユーザ数無制限のASPコースをご用意。


    eラーニングポータルサイト【elearning.co.jp】
    http://elearning.co.jp/
    eラーニング専門企業(株)キバンインターナショナルの製品を紹介しています。


    コンテンツビジネス支援パック
    http://contentsbank.jp/

    Ustream配信、動画コンテンツ制作、セミナーにご利用いただけるレンタルスタジオ
    Ustreamレンタルスタジオ「パンダスタジオ」
    http://pandastudio.tv/

    eラーニング専門企業(株)キバンインターナショナルのスタッフが、eラーニングに関する情報・最新事情をBlogでご紹介。月50本程度の情報発信を行っています。
    ブログ「blog.eラーニング.co.jp」
    http://blog.elearning.co.jp/

  • アーカイブ
  • カテゴリー
  • Amazon
  • タグ