WordPressの404判定はどこのフックタイミングでヒットするのか?

WordPressで404の判定がどのタイミングでされているのか調べてみた。

また、その時にクエリを変更して404判定を解除できるのか?

 

※hook名 → is_404()で判定。

 

parse_query → bool(false)

pre_get_posts → bool(false)

the_posts → bool(false)

wp → bool(true)

 

となった。

wpで判定されている。

 

じゃあ、例えば、2つのカスタム投稿をまたいで一覧を表示したい場合はどうするか。。

具体的なイメージは、

あるタクソノミーのときだけ、別のカスタム投稿の記事も合計した一覧を作りたい場合。

 

→これでページネーションをすると、メインのカスタム投稿の記事がないと404の判定になってしまう。

どこでhookをかけたらよいのか….

 

結論として「pre_get_posts」でhookをかける

「$query->set()」でクエリを変更する。archive時の表示件数を変更するのと同じ感じです。

function change_posts_query($query) {
    if ( is_admin() || ! $query->is_main_query() )
        return;


    if ( $query->is_archive() ) { /* アーカイブページの時に表示件数を5件にセット */
        $query->set( 'posts_per_page', 5);
    }
    if ( $query->is_archive() && $query->is_tax()) {
        $query->set( 'post_type', array('custom_post1','custom_post2'));
    }

}
add_action( 'pre_get_posts', 'change_posts_query' );

 

この場合の「get_post_type()」はどっちになるのか

→記事があるのほうのPOSTTYPEが返ってくる。オレオレ的にはメインはこっちのPOSTTYPEだからこっちを返せよ!!っていうのは通じない。

 

「get_query_var( ‘post_type’ )」では2つのPOSTTYPEが返ってきます。

 

っていうことで元の情報を取りながら…

下記のようにすることでURLで指定されたカスタム投稿タイプを取得することが可能

global $wp_query;
var_dump($wp_query->query["post_type"] );

 

 

 

2つをがっちゃん越して表示するのってやっぱりめんどいな。。。

 

 

今更だけどWordPressでホームページ制作するときに忘れがちなことをまとめてみた。

東京で、ホームページをWordPressを使って作成しているけど、関数とかどーするのかとか忘れてしまうからちょとした内容をまとめてみました。

 

get_posts()だと総ページ数が取得できない

それなのでページネーションを使う場合は「new WP_Query()」を利用する

 

固定ページでページネーションしたい

page.phpなどページテンプレートでページネーションを作ることが可能

 

自作したページネーションでarchiveをページ移動したら、404ページが表示される(記事表示件数を変更している場合)

 

function.phpで記事表示件数を変更している場合は、「pre_get_posts」でhookをかけて記事一覧の件数を変更します。

function change_posts_per_page($query) {
    if ( is_admin() || ! $query->is_main_query() )
        return;

    if ( $query->is_archive() ) { /* アーカイブページの時に表示件数を5件にセット */
        $query->set( 'posts_per_page', 5;
    }
}
add_action( 'pre_get_posts', 'change_posts_per_page' );

 

必ず日付を表示したい場合はthe_time()を使う

the_dateでは、「同じ日に複数の記事がある場合は、最初の記事とともに一度だけ出力される。」というこ動作仕様なので、毎回日付を表示したい場合は「the_time( ‘Y-m-d’ ); 」を利用する

 

投稿記事0件では、get_post_type()でPOST TYPEを取得することができない

そんな場合は「get_query_var( ‘post_type’ );」でPOST TYPEを取得する

 

taxonomy.phpで現在のタクソノミー名を取得したい

「get_query_var」を使って取得する。あとは「get_taxonomy( $taxonomy )」でタクソノミーの詳細情報を取得

    $taxonomy  = get_query_var('taxonomy');
    var_dump($taxonomy);

 

taxonomy.phpで現在のターム名を取得したい

「get_query_var」もしくは「single_term_title()」(名前で取得。taxonomy.php)を使って取得する

get_query_var( 'term' )

var_dump(single_term_title())

 

WordPressのクエリで全件取り出したい時は「posts_per_page」を「-1」とする

例:
$arg = array(
    'post_type'=>'page',
    'posts_per_page' => -1,
);
$posts = get_posts($arg);

※用途的には、テーマ設定等で固定ページの全件の一覧を表示して設定を作る場合に利用

 

サムネイルの有無判定を「has_post_thumbnail」で行った場合で、記事にアクセス制限に気を付ける

サムネイル判定に「has_post_thumbnail」を利用しますが、記事自体にアクセス制限がついている場合は、アクセス制限が許可されていないアカウントに対しては、サムネイルが無いよって判断となる。

→非会員でもサムネイルだけ見せたい場合は「has_post_thumbnail」を使えないので「get_the_post_thumbnail」で判定するのが良いかと思う。

 

WordPressはセッションを利用していない

もしワードプレスでセッションを利用したい場合は、PHPのセッション関数で利用することは可能。

 

ホームページ作成に関するちょこっとまとめのページ更新は、随時ついか。

 

.htaccessが勝手に書き換えられる

設定を更新すると勝手に.htaccessが書き換えられることがあります。あれ、設定入れていたのに消えた?ってならないようにするためには「# BEGIN WordPress~# END WordPress」の中に記載しないようにします。

 

特定のページを検索結果から除外したい。プラグインで実施

「Search Exclude」っていうプラグインがあるからそれをインストールして、各ページで設定すればOK

 

カスタム投稿毎の検索結果を作成したい

function.phpに「search-カスタム投稿名」のテンプレートを利用するよという登録が必要。

あとは、「search-カスタム投稿名」テンプレートファイルを作成していく。

 

function.phpに以下を記述

add_filter('template_include','custom_search_template');
function custom_search_template($template){
    if ( is_search() ){
        $post_types = get_query_var('post_type');
        foreach ( (array) $post_types as $post_type )
            $templates[] = "search-{$post_type}.php";
        $templates[] = 'search.php';
        $template = get_query_template('search',$templates);
    }
    return $template;
}

 

検索フォームにhiddenでpost_typew追記する

<form id="search" method="get" action="<?php echo home_url( '/' ); ?>">
  <input type="text" value="<?php the_search_query(); ?>" name="s">
  <input type="hidden" value="post" name="post_type" id="post_type">
  <input type="submit" value="Search">
</form>

ただこれで検索かどうか判定するとアーカイブっぽいので注意

 

URL的には、「/カスタム投稿名?s=」でもいけるみたい。「?s=」が無いとアーカイブが表示される

強制的にtermの内容を変更して保存する方法

WordPressで保存時に強制的にtermの値を追加もしくは変更して保存したかったのでWordPressの関数を調べていたところ「wp_set_object_terms」を発見した。

 

下記のように記述する。例:投稿IDにタームのチェックボックス1とチェックボックス2を強制的にチェックする

wp_set_object_terms(投稿ID, array('チェックボックス1','チェックボックス2'), 'ターム名', true );

 

動作的には上記の一文で、投稿IDのtermに対して変更が行われる。

詳しい関数に関しては下記のURLを参照

https://wpdocs.osdn.jp/関数リファレンス/wp_set_object_terms

 

使ってみたときのざっくりなポイントをまとめてみた。

・この関数だけでtermが保存される。

・termの名前で指定ができる

・4つ目の値で、追加なのか置き換えなのかの設定

・成功するとIDが返ってくる、失敗はエラー内容

 

コツをつかめばなんてことはないかな。

 

スマホ用冷却ツール

暑い夏が過ぎたこのタイミングですが、来年に向けての便利グッズをご紹介させていただきます。

 

電子機器を冷やす場合は、一般的な保冷剤は適しません。温度が低くなりすぎて、結露が発生し、その水で電子回路に悪影響があるため、スマホを壊す可能性があるためです。

 

今回、教えていただいたものは、「塩化化合物」でできており「潜熱」を利用した熱対策グッズなので結露することはないとのことです。

 

潜熱:氷が見ずになるように物質が個体から液体になったり(又は逆)するときの熱エネルギー

 

↓こんな感じで販売されています(アマゾンより)

 

これって。。。夏休みの自由研究になりそうなテーマかもって、今更ながら思いました。

 

とりあえず今日はここまで。

Googleでこのクエリの検索パフォーマンスが表示されるようになりました。

Googleでこのクエリの検索パフォーマンスが表示されるようにいつの間にか表示されるようになっていました。

 

ってなものが表示されております。

 

クエリの検索パフォーマンス欄の「使い方をご確認ください」をクリックするとそこの

 

「1925 年以来変更されていないメニューを掲載している場合は、更新してください。サルサパリラのような、廃れてしまったドリンクはあまり検索されません。」

 

って記載があり「サルサパリラ」ってなんだ!!って気になりました。

 

えーと、ありがたいことにウィキペディアにリンクが貼ってあり、見てみると

 

なんと「ドクターペッパー!!」( ゚Д゚)ノ

 

 

そうですね、最近は販売している自動販売機もあまりみなくなりました

 

一度も飲んだことがないので「ドクターペッパー」どんな味かわかりませんが、ドクターペッパー好きがいて飲んでいたのを思い出しました。。。

 

 

横道にそれましたら、ホームページの検索結果には、最新情報が掲載されているウェブサイトを優先させて表示させるという意味合いでしょうか・・・

contactform7でメール送信内容を強制的に変更する

contactform7でメール送信内容に追加したり、引いたりしたい場合があるかと思います。

今回なそんな場面に遭遇しましたのでhook方法を考えてみました。

 

まずは、「wpcf7_before_send_mail」でhookを掛ける

function.php

add_action("wpcf7_before_send_mail", "wpcf7_do_something");

function wpcf7_do_something($WPCF7_ContactForm)
{

~~~ ここに処理内容 ~~~
 return $wpcf7;
}

 

これでまずはメール送信時のフックが完成!!

 

じゃあ、何をどうしてっていうところで例えばメール本文を置き換える場合は

add_action("wpcf7_before_send_mail", "wpcf7_do_something");

function wpcf7_do_something($WPCF7_ContactForm)
{
    if($WPCF7_ContactForm->id() == コンタクトフォームのID)
    {
        $wpcf7      = WPCF7_ContactForm::get_current();//wpcf7で設定したデータを取得する
        $submission = WPCF7_Submission::get_instance();

        if ($submission) {
            $data = $submission->get_posted_data();//ここでPOSTされたデータを取得する

       //メールの本文を置き換える場合:例
              $mail         = $wpcf7->prop('mail');//メール送信部分を取得
              $mail['body'] ="おきたかえた本文";//本文の置き換えの文章

       ↓で置き換える
              $wpcf7->set_properties(array(
                    "mail" => $mail                
              ));

        }
    return $wpcf7;
     }
}

ってな感じで変更することができる。なので動的に変更しなければならない場合に役立つ。

 

 

contactform7で日付の入力ボックスをどうにかしたい

contactform7で問い合わせフォームを多々作成するのですが、やはり日付の部分が問題になることが多いです。

標準でついているDATEは、HTML5のカレンダー入力を利用するのですが、これですとIE11が非対応になる。

 

contactform7でHTML5のカレンダーが非対応の場合の対処

function.phpに追記

add_filter( 'wpcf7_support_html5_fallback', '__return_true' );

 

 

やっぱりこれだとHTML5のカレンダーを利用するので年数をプルダウンにしてほしいとかもろもろ対応できないです。

っていうことでjQuery UIのカレンダーを利用するのが良いかと思います。

 

WordPressにjQuery UIカレンダーを組み込む方法

function.phpに追記

・wp_enqueue_scriptsでアクション追加

   wp_enqueue_script('jquery-ui-core');
   wp_enqueue_script('jquery-ui-datepicker');

 

 

・filter追加

add_filter( 'wp_head', function() {

    ?>
    <script>
        jQuery( function() {
            jQuery( ".datepicker" ).datepicker({
                changeYear: true,  // 年選択をプルダウン化
                changeMonth: true,  // 月選択をプルダウン化
                showMonthAfterYear: true,//年を月の前にする
                yearRange: '-100:+0',//年の現在の年よりも100年前よりスタートする
            });
        } );
    </script
    <?php
} );

 

ていうことでjQuery UIのカレンダーが「.datepicker」というクラスで呼び出せるようになりました。

あとは、コンタクトフォーム7でテキストボックスで作成し、クラスに「.datepicker」を指定すればOKです。

消費税率変更で電卓の消費税率を変更しなくては

消費税率が変わると電卓の消費税も変更しなくてはいけません。

久しぶりの変更なので覚えてませんよ。

 

 

???ってな状態だと思いますので

 

まずは、メーカーと型番を控えます。

 

インターネットで検索!!

ネットって便利ですね。

 

電卓の消費税率設定のリンクをまとめてみました。

 

CANONの電卓は↓

https://faq.canon.jp/app/answers/detail/a_id/619

 

シャープの電卓は↓

https://jp.sharp/support/e_calc/tax.html

 

カシオの電卓は↓

https://support.casio.jp/answer.php?cid=004001001001&qid=6891&num=1

 

電卓の消費税率が保存できない!

そんなときは、電卓内の電池が消耗している可能性が高いです。

裏ブタを開けて電池を交換しましょう!おおまか、ボタン電池が入っています。

 

っていくことで電卓の消費税率が保存されないので、開けてみたら、電池が膨張し、液漏れしてました(;´∀`)

 

ソーラーと併用なので電卓機能は使えてしまうのですが、その裏では…電卓の電池を定期交換しないとだめかもしれませんね。

 

 

 

消費税込みの金額から消費税の金額を求める。

例えば1,080円の税込み商品で8%の消費税率だった場合の消費税を求める方法

計算式:1,080 ÷ 1.08 x 0.08 = 80円

 

っていうことで計算可能です。