検索結果のカスタマイズ

検索結果を全文表示と抜粋表示を変更する。

まずは、search.phpを開く。
条件分岐が施されていていずれも記事本文は、get_template_part関数により表示されると予想がつく。

get_template_part

get_template_part( 'template-parts/content', 'none' );

上文の場合、template-parts/content-none.phpを実行するというような意味だと思う。
template-parts/content-none.phpは実際にある。

get_template_part( 'template-parts/content', 'search' );

別の分岐では上文のように、「search」とあった。
だからtemplate-parts/content-search.phpがあるのかと思いきや、なぜか見つからない。

template-parts/content.phpは存在することに気づく。
もしかしたら、この場合はtemplate-parts/content.phpに引数として「search」を渡しているのでは、と想像した。
template-parts/content.phpを編集したところ、カスタマイズに成功した。
この想像が正しいかは不明だが、結果オーライということで。

the_contentとthe_excerpt

the_contentが全文表示、the_excerptが抜粋表示であるとわかった。
だからこの部分を好みに合わせ変更すればいいということになる。

if ( is_search() )とある。
「検索ページなら」という意味。
この場所にあるthe_excerpt関数をthe_content関数に変更した。

authorリンクをテキストに

記事タイトル直下にある、header内のauthorリンク部分のカスタマイズ。
つまり、著者別記事のリンクを、リンクなしの著者名テキストに変更する。

なぜ変更するかというと、そのリンクが不要と思うから。
リンク削除によって、クローラーの効率化がはかれる可能性があると考えた。
普通に考えて、著者が一人ならそのリンクは不要だ。

編集場所はどこか

当サイトでは個別記事のheader表示は、content-single.phpが該当する。
sparkling_posted_onというテーマ独自関数にて実行される。

sparkling_posted_on関数が定義されている場所は、template-tags.phpであった。

構造化が関係している

<a class="url fn n" href="https://~">著者名</a>
上記のように表示されているものを、次のように変更したいわけだ。
<a class="fn n">著者名</a>

“url fn n”は構造化データと関係あると思われ、空にするわけにはいかないようだ。
href以下を削除すればテキスト化される。
それに伴い、”url”の文字指定は削除しておく。
結果的に、class=”fn n”となる。
このような処理でないと、サーチコンソールでエラー表示が出ると思う。

編集方法

template-tags.phpを開く。

sprintf関数が使われている。
sprintfでフォーマットして、printfで出力する、ということだろう。

sprintf( '<span class="author vcard"><a class="url fn n" href="%1$s">%2$s</a></span>',

終結していない一文だが、上記一文を一旦コメント化する。
今回は次のように変更することにした。

//sprintf( '<span class="author vcard"><a class="url fn n" href="%1$s">%2$s</a></span>',
sprintf( '<span class="author vcard"><a class="fn n">%2$s</a></span>',

これで動いているようなので、様子見します。

フロントページのh1タグの消去

現時点の当サイトでは、固定ページはフロントページ(トップページ)にしか使用していない。

フロントは通常、ページタイトルはサイトタイトルと同じだ。
この場合、h1タグはタイトルと同じにする必要はない。
フロントのh1は通常と違い、うまい使い方もできそうだ、ということだ。
Wordpressのデフォルトのレイアウトだと何かと融通がきかないので、h1を一旦消去する。

構造化エラーが出ないように下準備

あらかじめhentryを消去しておく。
後日詳細。

編集場所はどこか

当サイトでは、content-page.phpが固定ページに該当するようである。

方法

<header><h1></h1></header>を、
<!--<header><h1></h1></header>-->というように、
HTMLコメントアウトすればいいと思う。

コメントアウトは入れ子にできないので範囲指定は厳密に。
他のコメントアウトを含まないように注意する。

ページタイトルの入力欄には、念のため全角スペース一文字を入力した。

Breadcrumb NavXT 記入場所

「Breadcrumb NavXT」はパンくずリストで構造化を促すプラグイン。

インストールするだけではだめで、テーマ編集から、コードを直接記入しないと動作しない。
記入コードですが、設定→ヘルプ→クイックスタートと進めば、記入例が載っています。
「typeof=”BreadcrumbList” vocab=”https://schema.org/”」の部分は必要だと思う。
例えば以下のように書きます。

<!--Breadcrumb NavXT-->
<div class="breadcrumbs" typeof="BreadcrumbList" vocab="http://schema.org/">
<?php if (function_exists('bcn_display')) {bcn_display();} ?>
</div>

個別記事への記入場所

個別記事に記入しないと、話にならないです。
自分は先頭ではなく、試しに記事の末尾に記入することにしました。
となると個別記事本文を扱う場所を探さねばなりません。

当方では、content-single.phpが該当する。
区切りのhrタグも追加しました。

カテゴリーなどへの記入場所

後からカテゴリー記事へは記入できないのかなと気がつきました。
結論を言うとこれはできます。

今回はタイトルと本文の間、つまり閉じたheaderタグの次に記入することにした。
当方では、archive.phpが該当する。

好みの問題

とりあえず動いているようなので様子見です。
デザインは後ででいいや。

結局は好みの問題なので、好きな場所においたらいいと思います。

カテゴリーリンクの非表示

記事タイトル直下にある、header内のカテゴリーリンク部分の編集。

所属カテゴリーへのリンクが表示されるが、その表示がない方がいい場合もある。
複数の所属カテゴリーリンクを表示するので、その場合はスマートに見えない。
構造化には成功しているので、カテゴリーへのリンクはあるわけだし。

親カテゴリーにチェックを入れるのと入れないのとでは、urlが変わってくる。
意味が違ってくるわけです。知ってました?
というわけで複数の所属カテゴリーリンクを表示させないという選択肢はある。

編集場所はどこか

当方では、content-single.phpが該当します。
タグ記述されているものを目で追い、その部分を推定します。
バッサリ、HTMLコメント化するのがわかりやすい。
テーマによって変わるので、以下は一例となります。

<!--<span class="cat-links"><i class="fa fa-folder-open-o"></i>
<?php printf( esc_html__( ' %1$s', 'sparkling' ), $categories_list ); ?>
</span>-->

 

テーマの更新メモ

自分用メモ。

CSS

クラスbylineにcss指定が必要かどうかがまだ未解決。
displayはinlineがデフォルト。
今試したところ特に変化なし、ログインログアウト影響せず。
一時的かあるいは錯覚であった可能性があるので、この指定は一旦削除する。

!importantに関しては、もっと頻繁に使ってもいいかと感じた。

the_post_navigation

前後ページへのリンクの消去。
the_post_navigation関数の前にif文がある。

ワンポイント構文メモ。
{}を使わない書き方。:と;の使い分けに注意する。

if () :
~;
elseif () :
~;
endif;

elseifはくっつけて書く。離しても動く場合もあるようだがデメリットしかないとのこと。
endifは分岐終了を意味する。

話を戻す。
the_post_navigation関数部分だけごっそりコメント化で消すことができそうだ。
今気がついたが「投稿ナビゲーション」という文字にh2を割り振っている。
この前後ページへのリンクはSEO上よくないような気がする。
関連リンクが必要と思えば手動で書けばいいと思う。
いずれにせよ面倒なのでパンくずリストを記事末にもってくることで代用できないかと考えているところである。

固定ページのタイトル

h1は一つでいいと思うし、いずれにせよ、ややこしくしないほうがいいような気はする。

コメントのウェブサイト欄を消してみた

コメントをたまにはもらいたい、でもリンクをはられたくない。
露骨だがそういうことだ。
あの憎きウェブサイト投稿欄どうにかならんものか。

CSSによる方法もある。
CSSで非表示

phpを編集するメリット

最初、CSSで投稿欄を消す方法をとっていた。
でも間を置かずに、外人さんのコメントがきた。
投稿欄を消しているにも関わらず、ウェブサイトとメアドの情報が入ってた。
CSSは効かない可能性があるので、削除するにも後味が悪い。

こいつはスパムであると、胸をはって削除することができるのがメリット。

編集場所はどこか

当方ではcomments.phpが該当ファイル。
comments.phpの中で、comment_form関数を探す。
comments.phpがない場合は、以下のような情報があった。
comments_template関数をとりあえず探す。
comments_template()の()の中に記述があれば、それが該当ファイルとなるらしい。
()の中が空なら、comments.phpが該当ファイル。
いずれにせよ最終的には、comment_form関数を探す。

自分はWordPress歴が長くないため、今回、著しい錯覚があったようだ。
情報源がネット検索オンリーなので。
失礼つかまつった。

今回はadd_filterによるカスタマイズ。
これは、通常はfunctions.phpに追加するのが普通ということでしょうか。
comments.phpとか探す必要はないということですね。

当方ではfunctions.phpに追加して、動作しました。

編集の全文

実際に当サイトで使ってみた全文を、まずは示します

add_filter('comment_form_default_fields' , function($arg){
$arg['url'] = '';
return $arg;
});
add_filter('comment_form_defaults' , function($arg){
$arg['comment_notes_before'] = '<p class="comment-notes"><span id="email-notes">' .
'メアド入力は任意です。表示されません。' .
'</span></p>';
return $arg;
});

前半の数行

add_filter('comment_form_default_fields' , function($arg){
$arg['url'] = '';
return $arg;
});

‘url’の部分が、ウェブサイト投稿欄を指定している。
さらにメールアドレス投稿欄も削除する場合、$arg[‘email’] = ”;の一文を加える。
つまり変更したいものだけを指定すればいい。

途中からfunction定義に移っていく。
無名関数を使う。
関数名を定義すると外部に干渉することがあると聞いた。
それで関数名を指定しない方法をとりました。

function ($arg) とあります。()の中、つまり引数は省略不可。

後半の数行

add_filter('comment_form_defaults' , function($arg){
$arg['comment_notes_before'] = '<p class="comment-notes"><span id="email-notes">' .
'メアド入力は任意です。表示されません。' .
'</span></p>';
return $arg;
});

外に影響しないので、変数名は同じもの(今回はarg)を使ってよい。

メアドに関する注意書きの文を変更する。
この指定内容はHTMLタグを含む。

「メールアドレスが公開されることはありません。」が初期値。
好みの文に変更する。

メールを任意とする場合

メールを任意とする場合は、管理画面からその設定をする。
またCSSで、displayがnoneになってないか確認する。

固定ページでの構造化データエラー

サーチコンソールの構造化データ項目でのエラー表示のことである。
フロントに固定ページを採用していると、上記エラーが発生する場合がある。

このエラー対策を検索したところ、hentry指定をなくすのが簡明な方法のようだ。
<~ class=”hentry”>
post_class関数によって指定されるようなので、該当部分をコメントアウトすればいいだろう。

編集場所はどこか

当方では、固定ページはcontent-page.phpが該当する。

編集方法

<article id=”post-<?php the_ID(); ?>” <?php post_class(); ?>>

上の一文に、php post_class関数が含まれている。
今回は、//を追加して一行コメントアウトで非表示にしてみます。

<article id="post-<?php the_ID(); ?>" <?php //post_class(); ?>>

以上です。

前の記事・次の記事をなくす

WordPressでは一つの記事の下に、前の記事のリンクとかつく。
これを消すにはどうするか。
テーマが変われば、処理も変わってくると思われる。

編集場所はどこか

single.phpのthe_post_navigation関数が該当するようだ。

消し方

近辺をざっくりコメントアウトした。

/*ここから複数行コメントアウト
the_post_navigation( array(
'next_text' => '<span class="post-title">%title <i class="fa fa-chevron-right"></i></span>',
'prev_text' => '<i class="fa fa-chevron-left"></i> <span class="post-title">%title</span>',
'in_same_term' => true,
) );
*/

()の位置、つまりどこまで括っているのかという点に注意を払う。
リンク部分だけまるごときれいに消去されているのを確認した。
簡単な作業だった。