WP トラブル対応

トップページ以外が404になる場合

・パーマリンク設定を保存しなおす。
・パーマリンクを「基本」に変更する。

・ローカルの場合、Apacheのhttpd.confのAllowOverrideをAllにする。
(リダイレクトを許可するかどうかという設定かな)

WP titleを変える

//ページタイトルを設定する
add_theme_support( ‘title-tag’ );
function change_title_tag($title){

$title = ‘ok’;
return $title;
}
add_filter( ‘pre_get_document_title’, ‘change_title_tag’, 10000 );

add_theme_supportを関数の外で実行しないと、add_filterが動かないみたい。

WP 順番など

仕組みに関すること。

フックというものがある。
何かの処理のタイミングに、カスタムな処理を引っ掛けることができる。
そのタイミングで実行させることができる。

フィルターフックとアクションフックがある。
add_filterとadd_actionを使って、処理(関数)をフック(連動させる)することができる。

—引用。https://liginc.co.jp/web/wp/customize/92030

add_filter( $tag, $function_to_add, $priority, $accepted_args );

$tag→フックの名前を指定します。
$function_to_add→フックしたタイミングで実行したい関数を指定します。
$priority→優先順位を整数で指定します。同じフック処理がある場合に数値が小さい方から実行されます。
$accepted_args→関数で使用する引数の数を指定します。指定できる引数の数はフックによって異なりますが、複数指定の場合でも1つ目の引数が本来の値で、2つ目以降の引数はフックされた時に利用する為の追加の要素にすぎません。

WPの移行

PHP5から7の開発環境に移行する場合の手順

プラグインを使用しないときは。
・FTPで全データをダウンロード。開発環境にアップロードする。
・データベースをすべてエクスポート。(Duplicatorを使った)。
・保存したSQLの、ドメインを全置換する。
・PHP5用のワードプレスを7に持っていくとエラーが発生するのでその対応
・wp-login.phpのwp-logon(”,****)この関数が、一つ目に引数に配列を指定しないとエラーになる。

WP クエリの仕組み

$wp_query
グローバル変数。リクエストの情報を与えることで、データベースから情報を取得する。
リクエストというのは、大体はURLということだと思う。

WordPressのループの仕組みを深く知る query_posts() と get_posts() の違い


ーーー
query_posts と get_posts の違い

get_posts() は、データを取得するだけ。query_posts() は、グローバル変数 $wp_query を変更する。
使ったあとに、これで元に戻してあげる必要がある。
wp_reset_query();

ーーー

have_posts()
現在の WordPress クエリにループできる結果があるかどうかをチェックする。

new WP_Query()
これで、たぶん

$the_query = get_posts(
array( ‘category__and’ => $category_array_notempty, ‘numberposts’ => 20, ‘s’ => $search_str, ‘paged’ => $paged )
);

get_post にパラメータを私て、$the_queryを作る。
pagedはURLに含まれているので、何もしなくても取れる。

$the_query = new WP_Query( $args );

WP_Queryは、記事を取得するためのクラス。
get_postsはWP_Queryクラスを利用して記事を取得する。テンプレートタグ。
どちらもメインループには影響を与えない。

WP_Queryの場合
$args = array( ‘post_type’ => ‘post’ );
$the_query = new WP_Query( $args );
while ( $the_query->have_posts() ) : $the_query->the_post();
the_title();
endwhile;
wp_reset_postdata();

have_posts():投稿があることを確認する
the_post():$postの中身を書き換える。

$postを書き換えることで、the_title()などを使って投稿の情報を取り出すことができる。
$postはグローバル変数なので、書き換えた後でresetを忘れないように。
$postを書き換えるのは、投稿の情報を取得するための関数を共通化する(使い回す)ためなんだと思う。

WP 検索機能

getで[‘s’]をつけて送ると、結果はsearch.phpをテンプレートにして表示される。

検索フォームはsearchform.phpというファイルに記載する。
searchform.phpがない場合は、デフォルトの検索フォームが表示される。

カテゴリの絞込み機能を追加する場合は、フォームに下記の一文を追加する。

ページ送り

endwhile;

the_posts_pagination( array(
‘mid_size’ => 2,
‘prev_text’ => __( ‘Back’, ‘textdomain’ ),
‘next_text’ => __( ‘Onward’, ‘textdomain’ ),
) );

$paged = get_query_var(‘paged’) ?: 1;
$loop = new WP_Query(
array(
‘posts_per_page’ => ‘3’,
‘paged’ => $paged,

WPテーマを作る

style.cssとindex.phpが必須。
functions.phpはなくても動く。

固定ページにテンプレートを当てる時は、page-***.php
ファイルに「* Template Name: ***」を書いておくと、投稿ページにテンプレートのセレクトが表示されるようになる。

wp_head()とwp_footer()は必須なので必ず書くように。
wp_head()は</head>の直前に、wp_footer()は </body>の直前に書く。
これがないとプラグインが動かなかったりする。

// アイキャッチ画像を有効にする。
アイキャッチ画像を使う時は、functions.phpに記載が必要。
add_theme_support(‘post-thumbnails’);

// 追加関数
function add_files() {

wp_deregister_script(‘jquery’);
wp_enqueue_script( ‘jquery’, ‘//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js’, “”, “20160608”, false );
wp_enqueue_script( ‘smart-script’, get_template_directory_uri() . ‘/js/common.js’, array( ‘jquery’ ), ‘20160608’, true );
wp_enqueue_style( ‘main’, get_template_directory_uri() . ‘/css/main.css’, “”, ‘20160608’ );
}
add_action( ‘wp_enqueue_scripts’, ‘add_files’ );

//アーカイブページのスラッグを設定する
これを設定した際は、パーマリンク設定の画面を「保存」しないと適用されない。

function post_has_archive( $args, $post_type ) {

if ( ‘post’ == $post_type ) {
$args[‘rewrite’] = true;
$args[‘has_archive’] = ‘news’; //任意のスラッグ名
}
return $args;

}
add_filter( ‘register_post_type_args’, ‘post_has_archive’, 10, 2 );

テーマのフォルダを追加する

<img src=”<?php echo get_template_directory_uri(); ?>/images/s_1.svg” alt=””>

uploadのフォルダパスを取得する

<?php $upload_dir = wp_upload_dir(); echo $upload_dir[‘baseurl’]; ?>

index.phpはとりあえずこれにしとこ

<?php get_header();?>

<?php
if ( have_posts() ) :
while ( have_posts() ) : the_post(); ?>
<!–コンテンツここから–>

<?php the_content();?>

<?php
endwhile;
endif;
?>

<!–コンテンツここまで–>
<?php get_footer();?>

ショートコードでURLを呼び出す

//親テーマ
add_shortcode(‘oya’, ‘shortcode_gtdu’);
function shortcode_gtdu() {
return get_template_directory_uri();
}

//子テーマ
add_shortcode(‘ko’, ‘shortcod_gsdu’);
function shortcod_gsdu() {
return get_stylesheet_directory_uri();
}
//TOPページ
add_shortcode(‘top’, ‘shortcode_hurl’);
function shortcode_hurl() {
return home_url( ‘/’ );
}

//月別アーカイブ
add_shortcode(‘arcive’, ‘shortcode_arcive’);
function shortcod_arcive() {
return wp_get_archives( $args );
}

//カテゴリーアーカイブ
add_shortcode(‘cat_$id’, ‘shortcode_cat_$id’);
function shortcod_cat_$id() {
return get_category_link($id);
}

//投稿タイプのアーカイブ
add_shortcode(‘post_$post_type’, ‘shortcode_post_$post_type’);
function shortcod_post_$post_type() {
return get_post_type_archive_link( $post_type );
}

サイトのURLを取得する

<a href=”<?php echo esc_url( home_url( ‘/’ ) ); ?>about”>製品案内<span>PRODUCT</span></a>

yoast SEOの設定

左のメニューから「検索での見えかた」を選択。
「タイトルを強制的に書き換える」でtitleを設定する。テンプレートにtitleタグがあるとそちらが優先されてしまうのでテンプレート「header.php」からtitleタグは消しておいたほうがいい。「%%sitedesc%% 」は、一般設定のキャッチフレーズが表示される。

固定ページに自動的に<br>や<p>が入るのを防ぐ

add_filter(‘the_content’, ‘wpautop_filter’, 9);
function wpautop_filter($content) {
global $post;
$remove_filter = false;

$arr_types = array(‘page’); //自動整形を無効にする投稿タイプを記述 =固定ページ
$post_type = get_post_type( $post->ID );
if (in_array($post_type, $arr_types)){
$remove_filter = true;
}

if ( $remove_filter ) {
remove_filter(‘the_content’, ‘wpautop’);
remove_filter(‘the_excerpt’, ‘wpautop’);
}

return $content;
}

カスタムフィールドを取得

get_post_meta($post->ID , ‘カスタムフィールドの名前’ ,true);
表示中のカスタムフィールドは「$post->ID」で取得。指定したい時はここに投稿のIDをいれる。
最後のtrueをfalseにすると配列で返ってくる。複数の値がある場合はfalseにするんだろう。

固定ページのカスタムフィールドを取得

<!–?php echo get_post_meta(62, ‘about_subsidy_subtitle1’, true);?–>
固定ページのID。カスタムフィールドのスラッグ

GETで値を受け渡し

そのままではGETやPOSTの受け渡しはできない。
functions.phpに以下の関数を追記する必要がある。
query_varsの配列にGETなどで受け渡すkeyを登録する。

function set_org_query_vars( $query_vars ) {
$query_vars[] = ‘prm1’; // 独自のパラメータ prm1を配列最後尾に追加する。
$query_vars[] = ‘prm2’; // 独自のパラメータ prm2を配列最後尾に追加する。
return $query_vars;
}
add_filter(‘query_vars’, ‘set_org_query_vars’);

フックに紐づいてる関数を調べる

/* フックされている関数のチェック */
function show_hook_func($attr){
global $wp_filter;
if($wp_filter[$attr[0]]){
$hookFunc.=’

‘.$attr[0].’にフックされている関数

‘;
foreach($wp_filter[$attr[0]]->callbacks as $cbKey=>$cb){
$hookFunc.=’

priority:’.$cbKey.’

    ‘;
    foreach($cb as $funcKey=>$func){
    $hookFunc.=’

  1. [‘.$funcKey.’]
  2. ‘;
    }
    $hookFunc.=’

‘;
}
$hookFunc.=’

詳細

’;
}else{
$hookFunc.=’現在フックに追加されている関数はありません。’;
}
return $hookFunc;
}
add_shortcode(‘hook_func’,’show_hook_func’);

understrap

understrap-master.zip
understrap-child-master.zip

この二つでやりまっせ。
この親テーマと子テーマを解凍して、子テーマを編集する。
子テーマのstyle.cssを編集します。

Template:understrap-master

Templateのとことに、親テーマのフォルダ名を記載してください。

https://www.virment.com/make-wordpress-theme-from-understrap/

子テーマのCSSファイルを参照する。
<?php echo get_stylesheet_directory_uri(); ?>

GAの目標にContactForm7をトラッキング

//無料体験レッスンの送信をGoogleアナリティクスへ
document.addEventListener( ‘wpcf7mailsent’, function( event ) {
ga( ‘send’, ‘event’, ‘Contact Form’, ‘submit’ );
}, false );

GAには、3番目をカテゴリ、4番目をアクションとして登録すれば良い。
カテゴリ:Contact Form
アクション:submit

MW WP Form エラー発生箇所にスクロールする

エラー発生箇所にスクロールする。

//問い合わせのエラー発生時にエラー箇所へスクロールさせる
$(document).ready(function(){
if ( $(‘.mw_wp_form .error’)[0] ) {
var errorEl = $(‘.mw_wp_form .error’).eq(0);
var position = errorEl.parent().offset().top;
$(‘body,html’).delay(200).animate({scrollTop:position}, 600, ‘swing’);
}
});