ホームページ制作時にやっぱ、印刷ボタンもつけてくれ~って言われることもあると思います。
WordPressの場合は気にすることないのですが独自で作っている場合はちょっとめんどいです。
ホームページの印刷プレビューのデバッグに役立つ方法
ブラウザのエミュレーターのCSSをPRINTにする
chromeの場合は、「F12」を押した後、下部の「・・・」から「Redering」>「Emulate media」を「PRINT」にする


これでPRINTのCSSが適用された状態で画面が表示される。
ホームページ制作時にやっぱ、印刷ボタンもつけてくれ~って言われることもあると思います。
WordPressの場合は気にすることないのですが独自で作っている場合はちょっとめんどいです。
chromeの場合は、「F12」を押した後、下部の「・・・」から「Redering」>「Emulate media」を「PRINT」にする


これでPRINTのCSSが適用された状態で画面が表示される。
reCAPTCHA V3の導入をしてみようと思ってテストしていたのですが、そのぐらいのそのサイトがスコアなのか閾値を決めるために知りたかったのでその方法を調べてまとめてみました。
基本的には、ダウンロードしたファイルをそのままアップロードして利用しようと考えています。
(「recaptcha-master/examples」フォルダの配下で動作させることが前提)
reCAPTCHAのスコアを確認するツールですがGITHUBで公開されています。
https://github.com/google/recaptcha
1.Clone or downloadをクリックしてZIPファイルでダウンロードします。

2.「recaptcha-master\examples」の「config.php.dist」→「config.php」にリネームします。
3.今回はV3を利用するのでV3のところに取得したサイトキーとシークレットキーを入れます。
'v3' => [
'site' => '取得したサイトキー',
'secret' => '取得したシークレットキー',
],
4.「autoload.php」のパス設定
require_once __DIR__ . '/../vender/autoload.php'; ↓ require_once __DIR__ . '/../src/autoload.php';
※該当ファイル「recaptcha-v3-request-scores.php」と「recaptcha-v3-verify.php」
5.「recaptcha-v3-verify.php」パスが「recaptcha-master/examples」にならないため、調整。
106行目の「recaptcha-v3-verify.php」のパスを変更
fetch('./recaptcha-v3-verify.php?action=<?php echo $pageAction; ?>&token='+token).then(function(response) {
※該当ファイル「recaptcha-v3-request-scores.php」
6.FTPで「recaptcha-master」毎アップロードします。
7.「設置したサイト/recaptcha-master/examples/recaptcha-v3-request-scores.php」にアクセスします。

これでreCAPTCHAのスコアが見えるようになりました。
スコアは、「4Received response from our backend:」の「”score”: 」の箇所を確認してください。
ホームページ作成にWordPressを利用していますが、コンタクトフォームとの組みあわせることによりスパム対策が強化になります。
また、利用するプラグイン(コンタクトフォームやコンタクトフォームの確認プラグイン)の組み合わせによってはコンタクトフォームが正常に動作しないケースがあるので注意が必要です。
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をかけたらよいのか….
「$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を使って作成しているけど、関数とかどーするのかとか忘れてしまうからちょとした内容をまとめてみました。
それなのでページネーションを使う場合は「new WP_Query()」を利用する
page.phpなどページテンプレートでページネーションを作ることが可能
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_dateでは、「同じ日に複数の記事がある場合は、最初の記事とともに一度だけ出力される。」というこ動作仕様なので、毎回日付を表示したい場合は「the_time( ‘Y-m-d’ ); 」を利用する
そんな場合は「get_query_var( ‘post_type’ );」でPOST TYPEを取得する
「get_query_var」を使って取得する。あとは「get_taxonomy( $taxonomy )」でタクソノミーの詳細情報を取得
$taxonomy = get_query_var('taxonomy');
var_dump($taxonomy);
「get_query_var」もしくは「single_term_title()」(名前で取得。taxonomy.php)を使って取得する
get_query_var( 'term' ) var_dump(single_term_title())
例:
$arg = array(
'post_type'=>'page',
'posts_per_page' => -1,
);
$posts = get_posts($arg);
※用途的には、テーマ設定等で固定ページの全件の一覧を表示して設定を作る場合に利用
サムネイル判定に「has_post_thumbnail」を利用しますが、記事自体にアクセス制限がついている場合は、アクセス制限が許可されていないアカウントに対しては、サムネイルが無いよって判断となる。
→非会員でもサムネイルだけ見せたい場合は「has_post_thumbnail」を使えないので「get_the_post_thumbnail」で判定するのが良いかと思う。
もしワードプレスでセッションを利用したい場合は、PHPのセッション関数で利用することは可能。
ホームページ作成に関するちょこっとまとめのページ更新は、随時ついか。
設定を更新すると勝手に.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=」が無いとアーカイブが表示される
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が返ってくる、失敗はエラー内容
コツをつかめばなんてことはないかな。
contactform7でメール送信内容に追加したり、引いたりしたい場合があるかと思います。
今回なそんな場面に遭遇しましたので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で問い合わせフォームを多々作成するのですが、やはり日付の部分が問題になることが多いです。
標準でついているDATEは、HTML5のカレンダー入力を利用するのですが、これですとIE11が非対応になる。
function.phpに追記
add_filter( 'wpcf7_support_html5_fallback', '__return_true' );
やっぱりこれだとHTML5のカレンダーを利用するので年数をプルダウンにしてほしいとかもろもろ対応できないです。
っていうことで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です。
Ulitmate Memberのユーザー権限グループでグループ名を指定する場合の注意しないといけないことがありました。
発動条件としては
権限グループ名:日本語の権限グループ名ABC
となっている場合。
具体的には最後の文字が英字で終わる場合
作成したロールIDが「um_%e3%82%b9%e….」のようになる。
通常は「custom_role_1」のように英数字で作られる
対処としては、最後の文字を英字にしないこと。全角で終わること。
もし「um_%e3%82….」のようなロールIDを作ってしまったら、通常の削除では消せない。
削除する場合は、
・DB上の「wp_options」の中の「um_role_」から始まって「%xx%xx」となっている行を削除する
・User Role Editorかなにかで、該当の権限を削除する
(格納先がわかりずらいのでこのようにしている)
コンタクトフォームプラグインで確認機能が標準で装備されているものがほしかったので調べた内容をまとめてみました。
■contactform 7
標準無し
別プラグインで実装可能だが微妙
→Jqueryとかである程度記述して、POPUPMAKERプラグインで確認をPOPUPで表示したほうがわかりやすいかも。
データは残せるのか:別プラグインで残すことが可能
■weforms
確認画面ないみたい
slack、salesforceとかに送れるみたい
データの残すのも別のツールに連携
■Ninja Forms – The Easy and Powerful Forms Builder
確認画面機能無し
フォーム作るのは簡単。ただ、姓と名を分けて横並びとかは苦労しそう
送信された履歴は残るみたい
■MW WP Form
確認画面機能あり
フォームの作り方は従来通りとっていいのかな?
エディタ画面でショートコードを埋めていくのでレイアウトも自由かな
データはフォーム毎に残す、残さない設定をする
また、データに残すデータは、メールで送信したデータに限るようだ。
独自のバリデーションも用意できるみたいなので拡張性はあるかな
いじょう、ざっくりな内容でした。
WordPressの投稿画面をすっきりしたいのと、追加されたフィールドの初期値を設定したい!って思ったのでやってみました。
1.投稿画面上部の「表示オプション」の中身を表示する
そうすると下記のように項目が多数ある

2.ブラウザの検証を起動して、非表示したい項目の値を取得する

3.function.phpに記述する
/**
* 投稿画面から不要な枠(メタボックス)を無効にします。
*/
function remove_post_meta_boxes() {
remove_meta_box( 'aiosp', 'post', 'normal' );
}
add_action( 'admin_menu', 'remove_post_meta_boxes' );
remove_meta_boxの設定ははこちら
これで不要なものの表示がなくなる
記述としては下記のように$pageに「post」「page」「カスタム投稿のスラッグ名」を入れればよいらしいがpost以外いかない、、、
remove_meta_box( $id, $page, $context );
↓で値に対してhookがかけられるようだ
https://docs.ultimatemember.com/article/976-umadminaccesssettingsfields
add_filter( 'um_admin_access_settings_fields', 'function_name', 10, 2 );
<?php
add_filter( 'um_admin_access_settings_fields', 'my_admin_access_settings_fields', 10, 2 );
function my_admin_access_settings_fields( $fields, $data ) {
// your code here
return $fields;
}
?>
次に初期値。。。