$link_url = "http://1234567890.co.jp/common/img/logo.gif" echo "<a href=".wp_make_link_relative( $link_url ).">○○○○</a>";
http://1234567890.co.jp/common/img/logo.gif
↓
/common/img/logo.gif
function SearchExcludeCategoryFilter($query) { if ($query->is_search) { $query->set('cat','1,2,3,4,5,6'); } return $query; } add_filter('pre_get_posts','SearchExcludeCategoryFilter');]]>
Magic Fieldsを使って特例のエリアの更新をカテゴリをキーにしてその中の投稿で行う場合があるので、検索に引っ掛けたくないカテゴリや投稿が出てくる。そんな時。
『category__not_in』のarrayに排除したいカテゴリIDを列挙(例:1,2,3,4)
『post__not_in』のarrayに排除したい投稿IDを列挙(例:5,6,7)
<?php query_posts(array('category__not_in' => array(1,2,3,4),'post__not_in' => array(5,6,7))); ?>
『posts_per_page』に表示しさせたい件数
『orderby』でID順か更新日順か等指定
『order』で降順/昇順を指定
『posts_per_page』に表示しさせたい件数を指定
『category__not_in』のarrayに除外したいカテゴリIDを列挙(例:1,2,3,4)
『post__not_in』のarrayに除外したい投稿IDを列挙(例:5,6,7)
<?php //他のquery_postsが継承されてしまう為、カテゴリ指定をデフォルトに戻す query_posts($query_string); //『posts_per_page』に表示しさせたい件数 //『orderby』でID順か更新日順か等指定 //『order』で降順/昇順を指定 //『posts_per_page』に表示しさせたい件数 //『category__not_in』のarrayに除外したいカテゴリIDを列挙(例:1,2,3,4) //『post__not_in』のarrayに除外したい投稿IDを列挙(例:5,6,7) query_posts('posts_per_page=10&orderby=date&order=DESC&array('category__not_in' => array(1,2,3,4),'post__not_in' => array(5,6,7))'); ?> <?php if ( have_posts() ) : ?> <?php while ( have_posts() ) : the_post(); ?> 〜 ここでループ 〜 <?php endwhile; ?> <?php else : ?> <p>該当する記事がありませんでした。</p> <?php endif; ?> <?php wp_reset_query();//最後に「query_posts」をリセット ?>]]>
右のキャプチャの様にアーカイブのリンクを特定のカテゴリで年別で出力、さらに「1月、2月、3月….」は「January、February、March….」と変換して投稿件数も出力させるようにしてみます。
※本来 /wp-content/themes/○○○○/functions.php に追記してテンプレート側で呼び出すのが正解ですが、
面倒なのでテンプレートファイルに直書きします。
ですが、何ファイルにも渡って記述する際にはfunctions.phpにいれましょう。
ついでに、プラグイン『Archives for a category』を使って
wp_get_archivesの中で「cat=37」(カテゴリID37の投稿記事のみ)を使えるようにもしてみます。
このような出力実装はプラグインのみで対応できるものもありますが、直書きしたスクリプトで対応した方が表示方法のカスタマイズがし易いので、現時点ではこのやり方がベターな気がしています。(ベストではないです。)
特定のカテゴリの投稿だけ抽出したい場合にはプラグイン『Archives for a category』を使います。
で、散らかしっぱなしのソース…
<div class="archive-area"> <p class="b15">Archives</p> <?php //プラグイン『Archives for a category』を使ってwp_get_archivesの中で「cat=37」を使えるようにする。 //→ http://kwebble.com/blog/2007_08_15/archives_for_a_category //参考:http://d.hatena.ne.jp/fujimori1981/20100313/1268419807 //1. 年を抽出して配列に格納 $archives_year = strip_tags(wp_get_archives('cat=37&type=yearly&show_count=0&format=custom&echo=0')); //wp_get_archivesに対してタグを除去して年数のみ抽出。 $archives_year_array = split("\n",$archives_year); //年数ごとに配列$archives_year_arrayに格納 array_pop($archives_year_array);//配列内の最後に空の配列ができてるので削除。 //2. アーカイブ一覧を取得して配列に格納 $archives = wp_get_archives('cat=37&type=monthly&show_post_count=1&use_desc_for_title=0&echo=0'); //月別アーカイブを取得。 $archives_array = split("\n",$archives); //同様に改行ごとに配列に格納。 foreach ($archives_year_array as $year_value){ //1で抽出した年数分繰り返し echo "<ul class='clearfix'>\n"; echo "<li class='year'>".ltrim($year_value)."</li>\n"; //<h4>で年を表示 foreach ( $archives_array as $archives_value) { //月別アーカイブ数分繰り返し if ( intval(strip_tags($archives_value)) == intval($year_value) ) { //1で取得した年と、2の各月別アーカイブの文字列を比較 $list = str_replace(intval($year_value)."年","",ltrim($archives_value))."\n";//2の月別アーカイブの各行のhtmlからYYYY年部分を除去して表示。 //↓タグを強制的に置換 $list = str_replace('<li>', '<li><p class="month">', $list); $list = str_replace('</a>', '</a></p>', $list); //$list = str_replace('/\' title', '/?lang=en\' title', $list); $list = str_replace(' (', '<p class="num">(', $list); $list = str_replace(')', ')</p></li>', $list); //↓月を英字に強制的に置換(以下の置換処理は設定やプラグインで不要になるかも。) $list = str_replace('>1月', '>January', $list); $list = str_replace('>2月', '>February', $list); $list = str_replace('>3月', '>March', $list); $list = str_replace('>4月', '>April', $list); $list = str_replace('>5月', '>May', $list); $list = str_replace('>6月', '>June', $list); $list = str_replace('>7月', '>July', $list); $list = str_replace('>8月', '>August', $list); $list = str_replace('>9月', '>September', $list); $list = str_replace('>10月', '>October', $list); $list = str_replace('>11月', '>November', $list); $list = str_replace('>12月', '>December', $list); //↓で、置換したものを表示 echo $list; //echo $year_value; //echo $archives_value; array_shift($archives_array); //表示した配列を削除。 } } echo "</ul>\n"; } ?> </div>
数値などは適所変更する
#archive p.b15{ font-size: 14px; line-height: 160%; font-family:'HelveticaNeueW01-75Bold'; font-weight: normal; color: #000; } #archive .archive-area{ width: 231px; padding: 25px 0 ; } #archive .archive-area ul{ list-style-type: none; } #archive .archive-area ul li{ width: 100px; font-size: 13px; line-height: 140%; color: #696666; } #archive .archive-area ul li a{ color: #696666; } #archive .archive-area ul li a:hover{ color: #000; text-decoration: none; } #archive .archive-area ul li p.month{ width: 80px; float: left; } #archive .archive-area ul li p.num{ width: 20px; color: #696666; float: right; } #archive .archive-area ul li.year{ font-size: 13px; line-height: 160%; font-family:'HelveticaNeueW01-65Medi'; font-weight: normal; color: #000; margin-top: 15px; margin-bottom: 3px; }]]>
wordpressを入れたら最初に行うこと。
管理画面の投稿編集で選択するカテゴリの並び順を調整する(チャックを入れたものが勝手に上にソートされるのを防ぐ)
/wp-admin/includes/meta-boxes.php の343行目付近
<?php wp_terms_checklist($post->ID, array( 'taxonomy' => $taxonomy, 'popular_cats' => $popular_ids ) ) ?>↓
<?php wp_terms_checklist($post->ID, array( 'taxonomy' => $taxonomy, 'popular_cats' => $popular_ids, 'checked_ontop' => false ) ) ?>
/wp-content/themes/○○○○/functions.php の末尾に下記を追記し、各所調整する。
//管理画面:ログイン画面のロゴ function custom_login_logo() { echo '<style type="text/css">h1 a {background: url('.get_bloginfo('template_directory').'/images/logo-login.png) 50% 50% no-repeat !important; }</style>'; } add_action('login_head', 'custom_login_logo'); // フッターWordPressリンクを非表示に function custom_admin_footer() { //echo '<a href="mailto:xxx@zzz">お問い合わせ</a>'; echo ''; } add_filter('admin_footer_text', 'custom_admin_footer'); // 管理バーの項目を非表示 function remove_bar_menus( $wp_admin_bar ) { $wp_admin_bar->remove_menu('wp-logo'); // W ロゴ $wp_admin_bar->remove_menu('view'); // 新規投稿 //$wp_admin_bar->remove_menu('site-name'); // サイト名 $wp_admin_bar->remove_menu('view-site'); // サイト名 -> サイトを表示 $wp_admin_bar->remove_menu('comments'); // コメント $wp_admin_bar->remove_menu('new-content'); // 新規 $wp_admin_bar->remove_menu('new-post'); // 新規 -> 投稿 $wp_admin_bar->remove_menu('new-media'); // 新規 -> メディア $wp_admin_bar->remove_menu('new-link'); // 新規 -> リンク $wp_admin_bar->remove_menu('new-page'); // 新規 -> 固定ページ $wp_admin_bar->remove_menu('new-user'); // 新規 -> ユーザー $wp_admin_bar->remove_menu('updates'); // 更新 $wp_admin_bar->remove_menu('my-account'); // マイアカウント $wp_admin_bar->remove_menu('user-info'); // マイアカウント -> プロフィール $wp_admin_bar->remove_menu('edit-profile'); // マイアカウント -> プロフィール編集 //$wp_admin_bar->remove_menu('logout'); // マイアカウント -> ログアウト } add_action('admin_bar_menu', 'remove_bar_menus', 201); // 管理バーのヘルプメニューを非表示にする function my_admin_head(){ echo '<style type="text/css">#contextual-help-link-wrap{display:none;}</style>'; } add_action('admin_head', 'my_admin_head'); // 管理バーにログアウトを追加 function add_new_item_in_admin_bar() { global $wp_admin_bar; $wp_admin_bar->add_menu(array( 'id' => 'new_item_in_admin_bar', 'title' => __('ログアウト'), 'href' => wp_logout_url() )); } add_action('wp_before_admin_bar_render', 'add_new_item_in_admin_bar'); //左メニューで不要な項目の削除(表示したいものだけコメントアウト) add_action( 'admin_menu', 'my_remove_menu_pages' ); function my_remove_menu_pages() { remove_menu_page('index.php'); //ダッシュボード remove_menu_page('edit.php'); //投稿 remove_submenu_page( 'edit.php', 'edit.php' ); //サブメニュー:投稿一覧 remove_submenu_page( 'edit.php', 'post-new.php' ); //サブメニュー:新規追加 //remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=category' ); //サブメニュー:カテゴリー remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=post_tag' ); //サブメニュー:投稿タグ remove_menu_page('upload.php'); //メディア remove_menu_page('link-manager.php'); //リンク //remove_menu_page('edit.php?post_type=page'); //固定ページ remove_menu_page('edit-comments.php'); //コメント remove_menu_page('themes.php'); //外観 remove_menu_page('plugins.php'); //プラグイン remove_menu_page('users.php'); //ユーザー remove_menu_page('tools.php'); //ツール //remove_menu_page('options-general.php'); //設定 remove_menu_page('admin.php?page=MagicFieldsMenu'); //Magic Fields(だめだ・・・できない) // Add top menu //add_menu_page(__('Magic Fields > Manage',$mf_domain), __('Magic Fields',$mf_domain), 'edit_pages', 'MagicFieldsMenu', $panelsAndModulesFunctions->panelsMenuFunction, plugins_url(MF_PLUGIN_DIR.'/images/wand-hat.png')); // Add Magic Fields submenus //add_submenu_page('MagicFieldsMenu', __('Write Panels',$mf_domain), __('Write Panels',$mf_domain), 'edit_pages','MagicFieldsMenu', $panelsAndModulesFunctions->panelsMenuFunction); } //左メニューに「カテゴリ操作」を追加 //参考:http://wald-grun.biz/blog/wp/4564/ function test_menu_page() { $siteurl = 'options-general.php?page=custom-field-template.php'; } function category_menu() { add_menu_page( 'カテゴリ操作', 'カテゴリ操作', 'read', 'edit-tags.php?taxonomy=category'); //add_menu_page( '固定ページ', '固定ページ', 'read', 'edit.php?post_type=page'); } add_action( 'admin_menu', 'category_menu' );]]>
うちで主に必要になるのは、アップした画像の回り込みやセンター寄せ等のスタイルと、プラグイン「wp-pagenavi」用のスタイルです。
(※marginの値は適所変更してください)
/* ================================================= */ /* wordpress UPLOAD IMG */ /* ================================================= */ img.centered { display: block; clear: both; margin: 0.25em auto 1.5em; /*margin: 10px auto;*/ } img.aligncenter { display: block; clear: both; margin: 0.25em auto 1.5em; /*margin: 10px auto;*/ } img.alignleft { float: left; clear: both; margin: 0.25em 1.5em 1.5em 0; /*margin: 0 10px 5px 0;*/ } img.alignright { float: right; clear: both; margin: 0.25em 0 1.5em 1.5em; /*margin: 0 0 5px 10px;*/ }
(※colorやmargin/paddingの値は適所変更してください)
/* ================================================= */ /* wordpress Plugin [wp-pagenavi] */ /* ================================================= */ /*#post p{padding-bottom:20px;}*/ .navigation { display: block; text-align: center; margin-bottom: 30px; font-size:12px; } .wp-pagenavi { clear: both; } .wp-pagenavi a, .wp-pagenavi span { text-decoration: none; border:0px solid #FFFFFF; padding: 3px 5px; margin: 2px; } .wp-pagenavi a:hover, .wp-pagenavi span.current { color:#fff font-weight:bold; border-radius: 2px; -webkit-border-radius: 2px; -moz-border-radius: 2px; } .wp-pagenavi span.current { border:1px solid #4A872A; background:#4A872A; border-radius: 2px; -webkit-border-radius: 2px; -moz-border-radius: 2px; color:#fff; } .wp-pagenavi .pages { display: none; }]]]>
<?php if (!is_user_logged_in()) { }else{ ?> ここに表示したい内容。 <?php } ?>]]>
<ol> <?php //↓カテゴリはID順序にし、特定のカテゴリID「1,9,10,11,13,15,17,21」を非表示、 $categorys = get_categories('orderby=id&hide_empty=0&exclude=1,9,10,11,13,15,17,21'); foreach ($categorys as $category) { //↓特定の文字列を削って表示させたい場合に。 $title = str_replace( "ここに特定の文字列", "",$category->name); ?> <li><a href="<?php echo get_category_link($category->term_id); ?>"><?php echo $title; ?>(<?php echo $category->count; ?>)</a></li> <?php } ?> </ol>
・関数リファレンス/get categories – WordPress Codex 日本語版
・get_categories:WordPress私的マニュアル
〜/plugins/wp-pagenavi/wp-pagenavi.php
#postという名でアンカーをつけます。
170行目付近
return "<a href='" . esc_url(get_pagenum_link($page)) . "' class='$class'>$text</a>";
↓
return "<a href='" . esc_url(get_pagenum_link($page)) .'#post'. "' class='$class'>$text</a>";]]>