Articles

続きを読むが英語なので...

BuddyDocsを使ってみると、続きを読むの部分が、Continue readingとなっていました。
まずは、手始めとして表記を日本語に変えることにします。

entry-faq.php(11,41) :
<?php the_content( __( ‘Continue reading <span class=”meta-nav”>&rarr;</span>’, ‘buddy-docs’ ) ); ?>
entry-page.php(14,37) :
<?php the_content( __( ‘Continue reading <span class=”meta-nav”>&rarr;</span>’, ‘buddy-docs’ ) ); ?>
entry-single.php(14,37) :
<?php the_content( __( ‘Continue reading <span class=”meta-nav”>&rarr;</span>’, ‘buddy-docs’ ) ); ?>
entry.php(14,41) :
<?php the_content( __( ‘Continue reading <span class=”meta-nav”>&rarr;</span>’, ‘buddy-docs’ ) ); ?>
buddydocs\entry.php(25,79) :
<a href=”<?php  the_permalink();?>” class=”read-more”><?php _e( ‘Continue Reading‘,’buddy-docs’ ); ?></a>

検索すると、これだけの個所がありましたので日本語に置換してしまいました。たぶん、問題無く動いているでしょう。

リンクをクリックするとアドレスが変わってしまう問題

WordPressのデータはサブディレクトリに入れて、サイトへのアクセスはルートで開くという事が出来ると説明に書いてあります。
その通り設定したところ、確かに表示は問題ありません。しかし、リンクをクリックしているといつの間にかWordPressを入れたディレクトリに移動している事があります。
原因は、site_urlとhome_urlの違いではないかと。説明によると、
site_urlは、「WordPress アドレス (URL)」
☞WordPressがインストールされている場所
home_urlは、「サイトアドレス (URL)」
☞サイトにアクセスするためのアドレス
紛らわしいですが、リンクで使用するのにsite_urlは良くないと思います。早速検索すると、

header.php(66,49):
<h1><a href=”<?php echo site_url(‘/’); ?>” class=”logo” title=”<?php echo $logo_alt; ?>”><?php bloginfo( ‘name’ ); ?></a></h1>

searchform.php(1,78):
<form role=”search” method=”get” id=”searchform” action=”<?php echo esc_url( site_url( ‘/’ ) ); ?>” >

admin\theme-options.php(8,29):
//define(‘NHP_OPTIONS_URL’, site_url(‘path the options folder’));

admin\options\options.php(13,29):
define(‘NHP_OPTIONS_URL’, site_url(str_replace( $fslashed_abs, ”, $fslashed_dir )));

admin\options\options.php(759,266):
echo ‘<p><a href=”javascript:void(0);” id=”nhp-opts-export-code-copy” class=”button-secondary”>Copy</a> <a href=”‘.add_query_arg(array(‘feed’ => ‘nhpopts-‘.$this->args[‘opt_name’], ‘action’ => ‘download_options’, ‘secret’ => md5(AUTH_KEY.SECURE_AUTH_KEY)), site_url()).'” id=”nhp-opts-export-code-dl” class=”button-primary”>Download</a> <a href=”javascript:void(0);” id=”nhp-opts-export-link” class=”button-secondary”>Copy Link</a></p>’;

admin\options\options.php(764,204):
echo ‘<input type=”text” class=”large-text” id=”nhp-opts-export-link-value” value=”‘.add_query_arg(array(‘feed’ => ‘nhpopts-‘.$this->args[‘opt_name’], ‘secret’ => md5(AUTH_KEY.SECURE_AUTH_KEY)), site_url()).'” />’;

の6か所ありました。
header.php(66,49): タイトルのクリック→[修正]
searchform.php(1,78): 検索窓→[修正]
のみで、あとは良くわかっていないのでそのままとしました。

サイドパネルが表示されない問題

BuddyDocsをURL指定で動的にテーマを切り替えて表示する様にしましたが、設定した通りに表示されませんでした。
とりあえずは、一般的な項目だけでよいので、
・カテゴリ
・最近の投稿
・最近のコメント
・アーカイブ(初めからあったw)
が表示される様にしたいところです。なので、sidebar.phpを編集してしまいます。

<?php if( ! dynamic_sidebar(‘main-sidebar’)):?> の部分で正しく読み込めない場合は固定のウィジェットを表示される様なので、<?php endif; ?>までの間を以下のように書き換えました。

<?php if( ! dynamic_sidebar(‘main-sidebar’)):?>
<li class=”widget”> <!– widget starts here –>
<h3 class=”widget-title”><span><?php _e( ‘カテゴリー’, ‘buddy-docs’  ); ?></h3>
<ul>
<?php $args = array(
‘show_option_all’    => ”,
‘orderby’            => ‘name’,
‘order’              => ‘ASC’,
‘style’              => ‘list’,
‘show_count’         => 1,
‘hide_empty’         => 0,
‘use_desc_for_title’ => 1,
‘child_of’           => 0,
‘feed’               => ”,
‘feed_type’          => ”,
‘feed_image’         => ”,
‘exclude’            => ”,
‘exclude_tree’       => ”,
‘include’            => ”,
‘hierarchical’       => 1,
‘title_li’           => ”,
‘show_option_none’   => __( ” ),
‘number’             => null,
‘echo’               => 1,
‘depth’              => 0,
‘current_category’   => 0,
‘pad_counts’         => 0,
‘taxonomy’           => ‘category’,
‘walker’             => null
);
wp_list_categories( $args );
?>
</ul>
</li>  <!– widget ends here –><li class=”widget”> <!– widget starts here –>
<h3 class=”widget-title”><?php _e( ‘最近の投稿’, ‘buddy-docs’  ); ?></h3>
<ul>
<?php wp_get_archives(‘type=postbypost&limit=5’); ?>
</ul>
</li>  <!– widget ends here –>
<li class=”widget”> <!– widget starts here –>
<h3 class=”widget-title”><?php _e( ‘最近のコメント’, ‘buddy-docs’  ); ?></h3>
<ul>
<?php
$comments = get_comments(array(‘status’ => ‘approve’ ,’number’ => 5));
foreach($comments as $comment):
$post = get_post($comment->comment_post_ID);
?>
<li><a href=”<?php the_permalink(); ?>”><?php the_title(); ?></a><br />
<?php comment_author_link(); ?>より</li>
<!–php comment_date(‘m/d’); comment_text(); –>
<?php endforeach; ?>
</ul>
</li>  <!– widget ends here –>
<li class=”widget”> <!– widget starts here –>
<h3 class=”widget-title”><?php _e( ‘Archives’, ‘buddy-docs’  ); ?></h3>
<ul>
<?php wp_get_archives( array( ‘type’ => ‘monthly’ ) ); ?>
</ul>
</li>  <!– widget ends here –>
<?php endif; ?>

必要ない部分もありますが、サンプルそのままで。インデント?なにそれおいしいの?
よく見る、コードを張り付けるコントロールの導入を考えないと...

カテゴリ表示などで、記事全体を表示する

カテゴリ表示などでは、記事を省略して「続きを表示」などと表示される事があります。
ここで、省略せずに記事全体を表示するには、the_excerpt(); → the_content(); とすれば良いらしい。

BuddyDocsの場合は、entry.phpにありました。
子カテゴリがない場合は、すべて表示するように、
<?php if (get_category_children($cat)){ the_excerpt(); }else{ the_content(); } ?>
としました。

 

記事を投稿順に表示する

Wiki的な使い方をする場合には、並び替えを投稿順にしたほうが都合がよいです。
並び順を古い順にするだけであれば、簡単にできるようです。

<?php while ( have_posts() ) : the_post(); ?>の前に、
<?php query_posts($query_string .’&order=ASC’); ?>を追加するだけ。

BuddyDocsの場合は、
index.phpなどにもありましたが、
category.phpを変更したら変わりました。

しかし...トップページの並び順は簡単には変わらない様子。

トップページのカテゴリ内記事数にサブカテゴリも含む

BuddyDocsのトップページは、第一階層のカテゴリ名しか表示されず、カッコの中の数字は、0(ゼロ)のまま。
少し寂しいので、子カテゴリのカウントも含めてあげたいと思います。

lib/docs-helper.php
function buddydocs_get_child_categories( $parent_id = 0 ) を変更します。

$categories = get_categories( array(
‘get’=>’all’,
‘parent’=> $parent_id,
‘pad_counts’=> true
) );

と、 ‘pad_counts’=> trueを追加すれば完了。

...出来ていない。
parent を指定している場合は、正しく取得できないらしい。仕方が無いので’parent’を’child_of’に変えてみても、表示項目は増えたけど変わらない。消してもダメ。
原因は、’get’=>’all’,でした。これを消したところ、正しくカウントする様になったので、あとは子カテゴリを表示しないだけです。

最終的にはこうなりました。

function buddydocs_get_child_categories( $parent_id = 0 ){
$categories2 = get_categories( array(
//’get’=>’all’,
//’parent’=> $parent_id,
‘child_of’=> $parent_id,
‘pad_counts’=>1
) );
$categories = array();
foreach ( $categories2  as $category ){
if($category->parent == $parent_id) array_push($categories,$category);
}
return $categories;
}

子カテゴリ以下も全部取得してから、親カテゴリの一致する物だけ返す様にしました。