moly のすべての投稿

wp_queryのスぺニットまとめ

度々忘れるのでまとめたいなーと思っているとよきサイトを発見しました!

ありがとうございますm(_ _)m

【これは便利!WordPressのWP_Queryでよく使うコードスニペット | それからデザイン スタッフブログ】様

とりあえずコードと説明文のまるパクリですw

<?php
$args = array(
    // ↓ 特定の「著者」に関連付けられた投稿を表示する場合
    'author' => '1,2,3',                       // 著者IDを指定
    'author_name' => 'solecolor',              // user_nicenameを指定(名前ではありません)
    'author__in' => array( 2 , 6 ),            // 著者IDを配列で指定(著者IDを含む記事を絞り込む)
    'author__not_in' => array( 2 , 6 ),        // 著者IDを配列で指定(著者IDを含まない記事を絞り込む)
    
    // ↓ 特定の「カテゴリー」に関連付けられた投稿を表示する場合
    'cat' => 5,                                // カテゴリーIDを指定
    'category_name' => 'daily, news',          // カテゴリースラッグを指定(複数の場合は「,」で区切る)
    'category__and' => array( 2 , 6 ),         // カテゴリーIDを配列で指定(カテゴリーIDを含む記事を絞り込む)
    'category__in' => array( 2 , 6 ),          // カテゴリーIDを配列で指定(カテゴリーIDを含む記事を絞り込む)
    'category__not_in' => array( 2 , 6 ),      // カテゴリーIDを配列で指定(カテゴリーIDを含まない記事を絞り込む)
    
    // ↓ 特定の「タグ」に関連付けられた投稿を表示する場合
    'tag' => 'cooking',                        // タグスラッグを指定
    'tag_id' => 5,                             // タグIDを指定
    'tag__and' => array( 2 , 6 ),              // タグIDを配列で指定(タグIDを含む記事を絞り込む)
    'tag__in' => array( 2 , 6 ),               // タグIDを配列で指定(タグIDを含む記事を絞り込む)
    'tag__not_in' => array( 2 , 6 ),           // タグIDを配列で指定(タグIDを含まない記事を絞り込む)
    'tag_slug__and' => array( 'red', 'blue' ), // タグスラッグを配列で指定(タグスラッグを含む記事を絞り込む)
    'tag_slug__in' => array( 'red', 'blue' ),  // タグスラッグを配列で指定(タグスラッグを含む記事を絞り込む)
    
   // ↓ 特定の「タクソノミー」に関連付けられた投稿を表示する場合(以下は複数のタクソノミーにてAND検索)
    'tax_query' => array(                          // タクソノミーパラメーターを指定
        'relation' => 'AND',                       // タクソノミーの検索条件に 'AND' か 'OR' が使用可能
            array(
                'taxonomy' => 'color',             // タクソノミーを指定
                'field' => 'slug',                 // term_id(デフォルト),name,slug のいずれかのタームの種類を選択
                'terms' => array( 'red', 'blue' ), // ターム(文字列かIDを指定)
                'include_children' => true,        // 階層を持つタクソノミーの場合に、子孫タクソノミーを含めるかどうか
                'operator' => 'IN'                 // 演算子'IN','NOT IN','AND','EXISTS'(4.1.0以降),'NOT EXISTS'(4.1.0以降)が利用可能
            ),
            array(
                'taxonomy' => 'actor',
                'field' => 'id',
                'terms' => array( 103, 115, 206 ),
                'include_children' => false,
                'operator' => 'NOT IN'
            )
    ),
    
    // ↓ 特定の「投稿&固定ページ」に関連付けられた投稿を表示する場合
    'p' => 1,                                      // 投稿IDを指定
    'name' => 'hello-world',                       // 投稿スラッグを指定
    'page_id' => 1,                                // 固定ページのIDを指定
    'pagename' => 'sample-page',                   // ページスラッグを指定
    'pagename' => 'contact_us/canada',             // 子ページを表示する場合、スラッシュ区切りで親と子のスラッグを指定
    'post_parent' => 1,                            // ページIDを指定した子ページを表示
    'post_parent__in' => array( 1, 2, 3 ),         // 配列の親ページIDを含む投稿を表示
    'post_parent__not_in' => array( 1, 2, 3 ),     // 配列の親ページIDを含まない投稿を表示
    'post__in' => array( 1, 2, 3 ),                // 配列の投稿IDを含む投稿を表示
    'post__not_in' => array( 1, 2, 3 ),            // 配列の投稿IDを含まない投稿を表示
    // ↓ 特定の「パスワード」に関連付けられた投稿を表示する場合
    'has_password' => true,                        // パスワード付きの投稿を表示( true or false )
    'post_password' => 'zxcvbn',                   // 特定のパスワードが付いた投稿を表示
    
    // ↓ 特定の「タイプ」に関連付けられた投稿を表示する場合
    'post_type' => array( 
            'post',              // 投稿
            'page',              // 固定ページ
            'revision',          // リビジョン
            'attachment',        // 添付ファイル
            'custom-post-type'   // カスタム投稿タイプ
    ),
    'post_type' => 'any',        // すべてのタイプを含めて表示(リビジョンと'exclude_from_search'がtrueにセットされたものを除く)
    
    // ↓ 特定の「投稿ステータス」に関連付けられた投稿を表示する場合
    'post_status' => array(      // 投稿ステータスを指定 (デフォルト'publish')        
            'publish',           // 公開された投稿、または固定ページを表示
            'pending',           // レビュー待ちの投稿を表示
            'draft',             // 下書きの投稿を表示
            'auto-draft'         // コンテンツのない、新しく作成された投稿を表示
            'future',            // 予約公開設定された投稿を表示
            'private',           // ログインしていないユーザーには見えない投稿を表示
            'inherit',           // リビジョンを表示
            'trash',             // ゴミ箱に入った投稿を表示
     ),
    'post_status' => 'any',      // すべてのステータスを表示(投稿タイプで'exclude_from_search'がtrueにセットされたものを除く)
    
    // ↓ ページ送りパラメーターを設定する場合
    'posts_per_page' => 10,            // 1ページあたりに表示する投稿数を指定(-1を指定するとすべての投稿を表示)
    'posts_per_archive_page' => 10,    // 1ページあたりに表示する投稿数(アーカイブページのみ)
    'nopaging' => false,               // ページ送りを使用するか、すべての投稿を表示するか、(デフォルトはfalseでページ送りを使用)
    'paged' => 6,                      // ページ番号6の記事を表示
    'paged' => get_query_var('paged'), // 現在のページから投稿を表示
    'offset' => 3,                     // 設定した数だけ、ずらして表示(例では4番目の投稿から表示)
    'ignore_sticky_posts' => false,    // 先頭固定表示投稿を無視するかどうか(デフォルト値は0で先頭固定表示投稿を無視しない)
    // ↓ 「投稿の並び順」を指定する場合
    'order' => 'DESC',         // 'ASC' 昇順  (1, 2, 3; a, b, c)
                               // 'DESC' 降順 (3, 2, 1; c, b, a)
    
    'orderby' => 'date',       // デフォルト値'date' 複数のオプションを渡すことが可能
                               // 例:'orderby' => 'menu_order title'
                               
                               // その他のオプション ↓
                               //'none'     並び替えなし
                               //'ID'       投稿IDで並び替え
                               //'author'   著者で並び替え
                               //'title'    タイトルで並び替え
                               //'name'     Order by post name(post slug)
                               //'modified' 更新日で並び替え
                               //'parent'   親ページIDで並び替え
                               //'rand'     ランダム順
                               //'comment_count'   コメント数で並び替え
                               //'menu_order'      ページの表示順で並び替え
                               //'meta_value'      アルファベット順で並び替え(数値ではうまくいかない)
                               //'meta_value_num'  数値で並び替え
                               //'post__in'        post__inで配列で指定された投稿IDの並び順を維持して表示
    
    // ↓ 特定の「時間や日付の期間」に関連付けられた投稿を表示する場合
    'year' => 2015,            // 4桁の年を数字で指定(2015など)
    'monthnum' => 4,           // 月を数字で指定( 1~12 )
    'w' =>  25,                // 年内の週を数字で指定( 0~53 )
    'day' => 17,               // 月内の日を数字で指定( 1~31 )
    'hour' => 13,              // 時間を数字で指定( 0~23 )
    'minute' => 19,            // 分を数字で指定( 0~60 )
    'second' => 30,            // 秒を数字で指定( 0~60 )
    'm' => 201404,             // 年と月を数字で指定 ( 201508など )
    // ↓ 「○年○月○日から○年○月○日の範囲の投稿情報」を表示する場合(投稿日の検索が自由自在!)
    'date_query' => array(
         array(
            'year' => 2015,                 // 4桁の年を数字で指定(2015など)
            'month' => 8                    // 月を数字で指定( 1~12 )
            'week' => 31                    // 年内の週を数字で指定( 0~53 )
            'day' => 5                      // 月内の日を数字で指定( 1~31 )
            'hour' => 2                     // 時間を数字で指定( 0~23 )
            'minute' => 3                   // 分を数字で指定( 0~60 )
            'second' => 36                  // 秒を数字で指定( 0~60 )
            'after' => 'January 1st, 2013', // 指定した日付以降の投稿を取得。strtotime()と互換性のある文字列で'after'=>'2015/08/31'などでもOK
            'before' => array(              // 指定した日付以前の投稿を取得。strtotime()と互換性のある文字列で'before'=>'2015/08/31'などでもOK
                  'year'  => 2013,          // 4桁の年を数字で指定(2015など) デフォルトは空
                  'month' => 2,             // 年内の月を数字で指定( 1~12 ) デフォルトは12
                  'day'   => 28,            // 月内の日を数字で指定( 1~31 ) デフォルトは月内の末日
             ),
            'inclusive' => true,            //「after」または「before」パラメーターで指定された値を含むかどうか
            'compare' => '=',               // 使用可能な値は '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'EXISTS' , and 'NOT EXISTS'
            'column' => 'post_date',        // 照会するカラムを指定。デフォルトは「post_date」
            'relation' => 'AND',            // OR または AND デフォルトは「AND」
        ),
    ),
    
    // ↓ 特定の「カスタムフィールド」に関連付けられた投稿を表示する場合
    'meta_key' => 'key',        // カスタムフィールドのキーを指定
    'meta_value' => 'value',    // カスタムフィールドの値を指定
    'meta_value_num' => 10,     // カスタムフィールドの値を指定
    'meta_compare' => '=',      //「meta_value」をテストする演算子。使える値は'!='、'>'、'>='、'<'、'=' デフォルト値は'='
    'meta_query' => array(      // カスタムフィールドパラメーター
         'relation' => 'AND',   // 「AND」または「OR」を指定。meta_query内の配列が「2つ以上」の場合に限る。meta_query配列が1つの場合は使用しない。
              array(
                   'key' => 'color',     // カスタムフィールドのキー。
                   'value' => 'blue',    // カスタムフィールドの値 (注意 compareの値が'IN'、'NOT IN'、'BETWEEN'、'NOT BETWEEN'のみ配列をサポート)
                   'type' => 'CHAR',     // カスタムフィールドタイプ。タイプについては以下の「meta_queryで使えるデータ型」参照
                   'compare' => '=',     // 演算子を指定 デフォルト値は'=' 演算子の種類については以下「meta_queryで指定できる演算子の種類」参照
              ),
              array(
                   'key' => 'price',
                   'value' => array( 1,200 ),
                   'compare' => 'NOT LIKE',
               )
    ),
    
    // ↓ 適切な権限を持っているユーザーのプライベートの記事を表示する場合
    'perm' => 'readable'     // 使える値は’readable’と’editable’
    // ↓ キャッシュ系のパラメーター
    'cache_results' => true,                // 投稿情報をキャッシュするかどうか デフォルトはtrue
    'update_post_term_cache' => true,       // 投稿タームキャッシュを更新するかどうか デフォルトはtrue
    'update_post_meta_cache' => true,       // 投稿メタキャッシュを更新するかどうか デフォルトはtrue
    'no_found_rows' => false,               // カウントをスキップする? tureでパフォーマンスが向上する可能性があるかも デフォルトはfalse
    // ↓ 検索系のパラメーター
    's' => $s, // 検索からクエリーストリング値を渡します。 
    'exact' => true, //タイトル/投稿の全体から正確なキーワードで検索するか デフォルト値はfalse
    'sentence' => true, //語句(フレーズ検索)で検索するか デフォルト値はfalse
    // ↓ 投稿フィールドパラメーター
    'fields' => 'ids'  //1つのフィールドで返すか全てのフィールドで返すか デフォルトでは全てのフィールドが返される
                        // 使用できる値↓ 
                        // 'ids' 投稿のIDの配列を返します
                        // 'id=>parent' 連想配列を返します
                     
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) :
while ( $the_query->have_posts() ) : $the_query->the_post();
  // 何かしらの処理
endwhile;
endif;
// 投稿データのリセット
wp_reset_query();
?>

meta_queryで使えるデータ型

データ型 内容
CHAR 文字
NUMERIC ‘SIGNED’の別名
DECIMAL 浮動小数点数
SIGNED 整数(符号あり)
UNSIGNED 整数(符号なし)
DATE 日付
DATETIME 日時
TIME 時刻
BINARY バイナリー

 

meta_queryで指定できる演算子の種類

比較演算子 内容
= 値と一致する
!= 値と一致しない
> 値より大きい
>= 値以上
< 値より小さい
<= 値以下
LIKE 値で指定した文字列に一致する場合
NOT LIKE 値で指定した文字列に一致しない場合
IN 値(配列)で指定した何れかに一致する場合
NOT IN 値(配列)で指定した何れかにも一致しない場合
BETWEEN 2つの値で指定した範囲内(境界を含む)場合
NOT BETWEEN 2つの値で指定した範囲外の場合

ページの好きな場所にユーザー情報を表示したいときはwp get current user

こんにちは!

ユーザー情報関連ですが、
今回のテーマは「ページの好きな場所にユーザ―情報を表示したいとき」
です。

では早速説明に入ります。

まず使うコードは
wp get current user

wp_get_current_user()/en

です。
現在日本語のページがないのでこのブログで我慢しましょう。
ちなみに
get_currentuserinfo
はver4.5から非推奨になったので、いつ使えなくなるか分からないので、出来れば使うのはやめておきましょうね!

では設定方法を英語サイトよりコピペして日本語訳したものがこちらになります。

<?php 
$current_user = wp_get_current_user(); 
/** 
* @example Safe usage: $current_user = wp_get_current_user(); 
* if ( !($current_user instanceof WP_User) ) 
*      return; 
*/ 
echo 'ユーザー名: ' . $current_user->user_login . '<br />';
    echo 'メールアドレス: ' . $current_user->user_email . '<br />';
    echo '姓: ' . $current_user->user_firstname . '<br />';
    echo '名: ' . $current_user->user_lastname . '<br />';
    echo '表示名: ' . $current_user->display_name . '<br />';
    echo 'ユーザーID: ' . $current_user->ID . '<br />';
?>

example Safe usageのところはとりあえずなくても動きますので
表示したい行を選んで使ってください。
自分はthe author metaも併用して表示するので次のようになります。。

<?php 
$current_user = wp_get_current_user(); 
the_author_meta( 'フィールド名', $current_user->ID );
?>

ちなみにthe author metaで使えるフィールド名は


user_login
user_pass
user_nicename
user_email
user_url
user_registered
user_activation_key
user_status
display_name
nickname
first_name
last_name
description
jabber
aim
yim
user_level
user_firstname
user_lastname
user_description
rich_editing
comment_shortcuts
admin_color
plugins_per_page
plugins_last_view
ID

他にも自分でfunctions.phpに追加したフィールドがあればそのフィールド名を入れるだけOK!
これで会員制サイトの完成も大分近づきました♪
では!

bootstrap4のタブで別ページから直接特定のタブにリンクする方法

本当に苦労しました。

結論から言うと、jqueryのバージョンアップ時に気を付けないといけないよね!ってことなのですが笑

では、参考にさせていただいたサイトはこちら

ハッシュ付きURLリンクでの訪問時にBootstrapの適切なタブを開く&スクロールする|ENTEREAL様

入力するコードはこちら
適当なjsファイルを名前を付けて保存してfooterで呼び出します。

$(document).ready(function() {
    // #(ハッシュ)指定されたタブを表示する
    var hashTabName = document.location.hash;
    if (hashTabName) {
        $('.nav-tabs a[href=' + hashTabName + ']').tab('show');
    }
});

おおむねこちらで動作します。JQueryのバージョンが低ければ・・・・

ただ、bootstrap4を使うとたぶんjquery3.○.○を使うと思うんですよね。そうすると、なぜか、タブが切り替わらい?!

そこからいろいろとトライ&エラーの繰り返しで、
jQueryのバージョンが原因だと突き止めたあと、
(サイトのデザインが完成している)いまさらバージョンを変えるわけにもいかずJQueryのサイトを見ていると、、

あるじゃん、「jQuery Migrate Plugin」なんて便利なものが!

google先生の翻訳で日本語になったサイトを読むと
そのプラグインを使うと失われた機能を取り戻すとかなんとか

とにかく、Download the compressed, production jQuery Migrate 1.4.1をダウンロード!

jQuery本体の下に呼び出してサイトにアップすると

動いた!!

とりあえず、わすれないうちに記録をしておきます。

WORDPRESSのサイト全体にパスワードをかけて非表示にする方法

テスト環境等で、サイトを表示したくないときってありませんか?

そんなときはfunctions.phpに次のコードを入力することでも可能です。

add_action('init', 'access_restriction');
function access_restriction() {
if (is_admin()) {
return;
}
wp_die('表示メッセージ', 'ページタイトル', array('responce' => 404));
}

これで管理画面以外の表示は出来なくなります。
※注意:ログイン画面のURLは必ず保存してからコードを入力してください。

この内容はこちらを参考にしました。

http://bashalog.c-brains.jp/14/02/13-085604.php

バシャログさんありがとうございました!

wordpressでサイト表示URLに変えたらiconフォントが表示されない時にやったこと

たまにあるのですが、さくらインターネットのサーバーでは起こりやすいらしいです。

うん。

さっきまで見えてたiconフォントが□になってる!?

そんな悩みありますよね?

今回久々すぎて、前はどうやったかなーってgoogle先生に聞いてみると、最高に親切なサイトに巡り合えました。

【助けて】さくらのサーバーだとIE9以降でwebfontが文字化けする

もう、本当にこのサイトに書いてある通りにしてみたら、スッキリと表示されましたよ。

.htaccess のディレクトリだけ少し気を付けて

RewriteRule (.*).(eot|eot#iefix|ttf|otf|woff)$ フォント格納ディレクトリまでのパス/proxy.php?url=$1.$2 [L]

ここで、注意点。

$の後にスラッシュはつけない。
パスはルート以下全てを入力。

参考サイトでは asset/fonts/ となっていましたが、自分はもっと長くなりました。

何はともあれ、本当Ikeda Hidenoriさんありがとうございましたm(_ _)m

記事の一覧のn番目にgoogleアドセンスを挿入する

googleアドセンスを記事一覧の途中に挿入したいと思ったことはありませんか?

そんな時は次のようにカスタムをするとokです。

基本ループの最後にコードを付けたし次のようにします。

<?php if(have_posts()): while(have_posts()): the_post(); $loopcounter++; ?>

そしてループ内の表示したい位置に次のコードを張り付けます。

<?php if($loopcounter%n==0) {//このnを好きな数字にするとn番目の記事での表示になります。
print <<<EOD
//(ここにgoogleアドセンスのコードを張り付けます。)
//必要ならば<li></li>等もここに記入
EOD;
} ?>
<?php endwhile; ?>

これで無事広告が表示されます!
是非やってみてください。

検索キーワードにカスタムフィールドの値も使えるようにする。

wordpressでカスタムフィールドを使っているときに、カスタムフィールドの値が検索してもでてこなくて
どうしようか悩んだときのメモ

searcheverythingというプラグインもいいのですが、
それだと、or検索ができなくなってしまいます。

そこで、いろいろと調べていると、こちらのサイト非常に参考になりました!
続・WordPressの検索をカスタマイズしてみた|notnil creation weblog
functions.phpに以下のコードを書き足すだけで悩みは解決です。
細は上のリンクからご確認ください。
Takuro Hishikawaさん、本当にありがとうございました。

function my_search_join( $join, $query ) {
if ( is_admin() || ! $query-&gt;is_main_query() )
return $join;

global $wpdb;
if( $query-&gt;is_search() ) {
$join .= " LEFT JOIN $wpdb-&gt;postmeta ON "
. "$wpdb-&gt;posts.ID = $wpdb-&gt;postmeta.post_id ";
}
return $join;
}
function my_search_where( $where, $query ) {
if ( is_admin() || ! $query-&gt;is_main_query() )
return $where;

global $wpdb;
if ( $query-&gt;is_search() ) {
$where = preg_replace(
"/\(\s*$wpdb-&gt;posts\.post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
"($wpdb-&gt;posts.post_title LIKE $1) OR ($wpdb-&gt;postmeta.meta_value LIKE $1)",
$where
);
}
return $where;
}
add_filter( 'posts_join', 'my_search_join', 10, 2 );
add_filter( 'posts_where', 'my_search_where', 10, 2 );

ちなみにor検索をするのはfunctions.phpに以下のコードを追加

add_filter('posts_search', function($search) { return str_replace(')) AND ((', ')) OR ((', $search); });

参考になったイラストサイト①

デザインをするときに参考になったサイトを書き留めておきます。

DesignTips様のサイトの

アカデミックなデザインにしたくて探していたら、丁寧に説明もありわかりやすかったです♪

皆さんもぜひご参考までに!