メニューに表示されるタイトルをカスタマイズする

メニューやサイドバーに表示される、カテゴリー一覧のタイトルをカスタマイズする方法。

たとえば、カテゴリー名が「おすすめの商品一覧」だったとします。そのとき、ナビゲーションメニューやウィジェット(サイドバーなど)でカテゴリーの一覧を表示させると、そのカテゴリー名がそのまま表示されます。

でも、そうではなくて、カテゴリー名は「おすすめの商品一覧」であっても、ナビゲーションメニューやサイドバーでは「おすすめ」などと、ちがうタイトルで表示させたい場合のカスタマイズです。

まずは、カテゴリーにカテゴリーウィジェットで表示するタイトルを設定できるカスタムフィールドを準備します。

カスタムフィールドを用意する

ここでは、Advance Custom Fildeを使います。

フィールド名は、category_menu_titleにしておきます。

位置は「タクソノミー」「等しい」「カテゴリー」に設定します。

ナビゲーションメニューのカテゴリータイトルを変更する

function.phpに次のように追記します。

function nav_menu_cattitle( $item_output, $item, $depth, $args ) {
	if ($item->object == 'category' && $item->type == 'taxonomy'){
	    $post_id = 'category_'.$item->object_id;
	    $info_fiald = get_field('category_menu_title',$post_id);
	    if ($info_fiald){
		$item_output = str_replace( '">' . $args->link_before . $item->title, '">' . $args->link_before . $info_fiald , $item_output );
	    }
	}
	return $item_output;
}
add_filter( 'walker_nav_menu_start_el', 'nav_menu_cattitle', 10, 4 );

ウィジェットのカテゴリー一覧のタイトルを変更する

function.phpに次のように追記します。

function widget_menu_cattitle( $output, $args ) {
    $regex = '/<li class="cat-item cat-item-([\d]+)[^"]*">/';
    $taxonomy = isset( $args['taxonomy'] ) && taxonomy_exists( $args['taxonomy'] ) ? $args['taxonomy'] : 'category';
    preg_match_all( $regex, $output, $m );
    if ( ! empty( $m[1] ) ) {
	$replace = array();
	foreach ( $m[1] as $term_id ) {
	    $post_id = 'category_'.$term_id;
	    $title_fiald = get_field('category_menu_title',$post_id);
	    $term = get_term( $term_id, $taxonomy );
	    if ( $term && ! is_wp_error( $term ) && $title_fiald ) {
		$replace['/<li class="cat-item cat-item-' . $term_id . '"><a href="(.*?)" >.*?<\/a>/'] 
			= '<li class="cat-item cat-item-' . $term_id . '"><a href="$1" title="' . $term->name . '">' . $title_fiald . '</a>';
	    }
	}
	$output = preg_replace( array_keys( $replace ), $replace, $output );
    }
    return $output;
}
add_filter( 'wp_list_categories', 'widget_menu_cattitle', 10, 2 );

参考になりました→https://kaiza.jp/result/result-272/

カテゴリーに表示するタイトルを設定する

あとは、カテゴリーのところで、表示させたいタイトルを設定すればOK。

 

 

0

WordPress5.0で使いにくくなったエディタをもとに戻す

アップデートのお知らせがあって、WordPress5.0にアップデードしてから、投稿や固定ページのエディターがいつもと違うことに気がついて焦ってる人が多いと思います。

だって、こんな事になってしまってるのだから。

パーマリンクはどこいった?なぜに英語?テキストエリアが狭い?

実はアップデート前から、ダッシュボードにこんなお知らせが出てました。

今日から新しいエディターを試しましょう。

Gutenberg をプラグインとしてインストールすることで公式リリース前にテスト実行し、必要であればフィードバックできます。 テストバグ報告GitHub リポジトリ上でのコントリビューションを通じて手伝うことができます。

Gutenberg(グーテンベルフ)という名前の新しいエディターのようです。ということで、今後はこれが標準のエディターになりうようです。

でもこれは使いづらい。。。
いずれは、改善されていくのでしょうけれど、今は使えません!と判断。ということで対策。

まだ準備ができていませんか ?

WordPress の次のメジャーリリースからデフォルトで新しいエディターが有効になります。現在使っているテーマやプラグインに互換性があるかどうか分からない場合には回避策があります。 Classic Editor プラグインをインストールして、切り換えの準備ができるまで現在のエディターを使い続けましょう。

とありますので、ここはClassic Editerというプラグインを使って対策しましょう。

インストールして有効化するだけで、今までどおりのエディターにもどせます。

0

[WordPress]MapPressで位置情報が入力できない

これまで、問題なく運用できていたウェブサイトのMapPressの設定画面が、突然エラーで表示されなくなる問題が発生。原因はGoogle Maps API の料金体系変更に伴うものということがわかって、そのために設定が必要でした。

でも、なかなかうまくいかず、苦しめられたのでまとめ。

Google Cloud Platform とは?

これまでGoogle Maps APIとしていたものが、Google Maps Platformというサービスにまとめられて、さらにGoogle Maps Platformは、Google Cloud Platformというサービス群の一つという系統になったようです。

ということで、まずはGoogle Cloud PlatformでAPIを有効にして利用できるように設定する必要があります。

ちなみに、2018年8月現在、「Google Maps API」で検索すると、Google Developers のサイトが検索されますが、

でも、クリックして表示されるのは、Google Maps Platformです。

https://cloud.google.com/maps-platform/

コンソールから設定する

ここでは「コンソール」から設定します。(Googleアカウントにログインしている状態である前提ですすめます)

「プロジェクトの選択」で、対象のプロジェクト(Google Maps APIを利用するウェブサイトに対応するプロジェクト)を選びます。

はじめて、MapPressを利用するのであれば、プロジェクトも新規で制作する必要があるかもしれませんので、「プロジェクトを選択」をクリックして「新規プロジェクト」をクリックします。

プロジェクトを作成、または選択すれば、ダッシュボードが表示されると思うので、「APIの概要に移動」をクリックします。

MapPressで必要なのは、Maps JavaScript API と、Places API の二つ。

まずは、Maps JavaScript APIを有効にします。

Maps JavaScript API

さらに、もう一つのAPI「Places API」を利用できるようにします。管理画面がとても分かりにくく、どこから追加するのか迷いに迷いました。とりあえず、左ペインの「API」をクリックします。

「未使用のAPI」にある、「Place API for Web」 をクリックします。

Place API を有効化します。

Places API

「認証制限」をクリックします

APIキーを作成する

もし、初めてAPIを使う場合は、APIキーを作成します。(すでにAPIキーがある場合は、この章は飛ばしてください)
[承認情報を作成] をクリックして、APIキー を選択します。

APIキーが作成されました。これをMapPressの設定で使いますので、コピペして閉じます。

APIキーを制限する

ただ、キーを制限しておかないと、かってに利用されて課金されたら目も当てられないので、「キーを制限」から、APIキーを編集します。

アプリケーションの制限で、「HTTPリファラー(ウェブサイト)」を選択し、対象のURLを入れます。http://website.com/* のように入れます。*はワイルドカードで、サブフォルダも対象にするという意味です。

続いて、「APIの制限」をクリックして、Select API をクリックします。

Maps JavaScript API と、Place APIを選びます。

MapPressの設定

まだ、APIキーを設定していなければ、WordPressの管理画面から、MapPressの設定で、コピーしたAPIキーを貼り付けます。

これで、MapPressでGoogle Maps を利用できるようになるはずです。

 

 

 

 

 

0

接続が切断されました: 送信時に、予期しないエラーが発生しました。。

.Net 4.5 で組んでいるアプリから、サクラインターネットのwebサーバーにあるAPIに、HTTPS通信するようにしていたシステムが、ある日突然

「接続が切断されました: 送信時に、予期しないエラーが発生しました。。」

とエラーをだすようになりました。

証明書の期限切れかと思ったのですが、それは問題なかった。

結局、エラーをキーワードに調べまわって、やっとわかったことがTLS1.0、1.1の廃止に伴うものでした。。

https://qiita.com/tanj/items/31a0fd6b188952886de5

確かに、さくらインターネットからの発表がありましたね。エラーが発生し始めた時期的にもビンゴです。

https://qiita.com/tanj/items/31a0fd6b188952886de5

というわけで、TLS1.2に対応できるように次のコードを付け加えました。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

参考:https://blogs.technet.microsoft.com/jpieblog/2015/04/07/net-framework-tls1-1-1-2/

1+

カスタムタクソノミーのアーカイブページやカスタム投稿ページを非表示にする

WordPressで、カスタム投稿のシングルページ(個別ページ)を出力させたくないときがあります。たとえば、「よくある質問」のように、コンテンツが数百文字でおわってしまうような場合です。その場合、シングルページは寂しい内容になってしまうので、それならいっそ、アーカイブにタイトルとコンテンツを、並べて表示させたほうがいい、という場合です。

対策としては、noindexを入れて、どこからもリンクが発生しないようにすればいいかもしれませんが、どうしても亡きものにしてしまいたいときは、リライトで404にしてしまえ。という方法がこれです。

add_filter( 'faqs_rewrite_rules', '__return_empty_array' ); 

faqs_rewrite_rules の faqs のところがカスタム投稿のスラッグです。

これを、function.phpなどにいれて、リライトルールをフラッシュすればOKです。
リライトルールのフラッシュは、管理画面の設定→パーマリンク設定→[変更を保存]をクリックするか、次のコードを1回だけ実行させます。

function flushRules(){
	global $wp_rewrite;
   	$wp_rewrite->flush_rules();
}
add_filter('init','flushRules');		

また、カスタムタクソノミーのアーカイブページを出力したくないときは、

add_filter( 'area_rewrite_rules', '__return_empty_array' ); 

をいれます。areaの部分がカスタムタクソノミーのスラッグです。

他にも、投稿ページや固定ページ、カテゴリーページなど表示させない、というハードボイルドな使い方もできます。

//投稿のシングルページを404に
add_filter( 'post_rewrite_rules', '__return_empty_array' ); 

//固定ページを404に
add_filter( 'page_rewrite_rules', '__return_empty_array' ); 

//カテゴリーページを404に
add_filter( 'category_rewrite_rules', '__return_empty_array' ); 

//投稿者アーカイブを404に
add_filter( 'author_rewrite_rules', '__return_empty_array' ); 

//検索結果ページを404に
add_filter( 'search_rewrite_rules', '__return_empty_array' ); 

詳しくは、関数リファレンスの、WP Rewriteのプラグインフックの項目にあるのですが、日本語版にはカスタム投稿やカスタムタクソノミーについては記載がありません。

ので、英語版の方をみてみると、

「Filter: {$permastruct}_rewrite_rules - Can be used to create or modify rewrite rules for any custom permastructs, such as taxonomies or custom post types.」

というのが見つかります。

もちろん、このフィルターフックは、ページを404にするためだけに存在しているのではなく、たとえばカスタムタクソノミーのアーカイブページにだけ、リライトルールを自作する、といったときにつかうことも出来るようです。

いろいろ調べ回って、突破口になりました。→初期状態のWordPressで作られるページ

ありがとうございます!

0

[MySQL]SELECTで取得したデータをカンマ区切りで横に並べる

MySQLで、SELECTするときに、取得したデータをカンマ区切りで横に並べて取得したいとき、GROUP_CONCATを使います。

まずはサンプルデータを作成。

CREATE TABLE member (group_id int , name varchar(20) , age int(3)); 
INSERT INTO member VALUES 
(1 , 'TANAKA' , 22 ) , (1 , 'HONDA' , 21 ), (1 , 'YOSHIDA' , 25 ), 
(2 , 'HIROSE' , 26 ), (2 , 'YAMADA' , 25 ), (2 , 'IKEDA' , 29 ), 
(3 , 'HARADA' , 28 ), (3 , 'OKUDA' , 22 ), (3 , 'OOTA' , 24 );

で、SELECTでデータを取得。 

SELECT group_id , GROUP_CONCAT(DISTINCT age SEPARATOR ',') FROM member GROUP BY group_id;

すると、こんな感じで取得できます。

1 22,21,25
2 26,25,29
3 28,22,24

DISTINCT  age で、ageをまとめます。

SEPARATOR ',' で、カンマ区切りとしています。

GROUP BY group_id で、group_id別でまとめるようにしています。

 

WHEREをつかえば、特定のgroup_idだけを取得できますね。

SELECT group_id , GROUP_CONCAT(DISTINCT age SEPARATOR ',') FROM member WHERE group_id=1
0

[WordPress]サイトアドレスの設定を間違えてログインできなくなった

WordPressの設定→一般設定

で、WordPress アドレス (URL)とサイトアドレス (URL)を間違えて設定してしまうと、管理画面に入れなくなって大変焦ります。慣れてしまうとどうってことないのですが、不慣れな人にとっては恐怖の設定です。

というわけで、WordPressにログインできなくなって、大変焦ったときの対処法。

FTP接続ツールは必須

まず、かならずファイル内容が編集できる手段(FTP接続等)が必要です。WordPressの管理画面しか設定手段がないとお手上げです。なので、WordPress管理者ではあるけれど、インストールは業者さんなどの別の人がした、という場合は、すみやかにその人にお願いするか、FTP接続できる手段を提供してもらうべきです。

もしくは、レンタルサーバーの「簡単インストール」のような機能を使ってインストールしたのなら、レンタルサーバーのファイルマネージャーをつかう方法もあります。

いずれにしても、WordPressをインストールしているディレクトリ(フォルダ)にある、config.phpを編集できることが必須です。

config.phpにWP_SITEURLとWP_HOMEを書き加える

アドレス (URL)とサイトアドレス (URL)をまちがって設定してしまった場合の対処方法を検索すると、この2つを「config.phpに書き加えましょう。」とあります。

define('WP_SITEURL', 'http://****.com');
define('WP_HOME', 'http://****.com');

ひとまずこれで解決しますが、defineを使うと、設定→一般設定 からアドレス (URL)とサイトアドレス (URL)を設定できなくなります。しかも、書き加えたdefineを消すと、もとに戻ってしまうので、根本的な解決にならないことがあります。(逆に、不用意に設定を変えられなくなるので安全とも言える)

なぜ、そんなことになるかというと、アドレス (URL)とサイトアドレス (URL)の設定そのものはデータベースに保存されているからです。defineは定義という意味で、データベースの内容そのものを書き換えるコマンドではありません。

update_optionでsiteurlとhomeを書き換える

なので、設定そのものを元に戻したかったら、update_optionを使ったほうが便利です。

update_option( 'siteurl', 'http://****.com' );
update_option( 'home', 'http://****.com' );

ただし、config.phpに書き込むときには、require_once(ABSPATH . 'wp-settings.php'); と書いている部分より下に書き込んでください。(つまり、config.phpの最後に書き加えればOK。)

正常にもどったら、書き込んだ update_option はもういりません。消しても大丈夫です。update_option は、データベースに保存されるWordPressのサイトオプションを上書きするからです。

 

0

[WirdPress]PHP7.1でエラーが発生「Exec-PHP」を修正

レンタルサーバーの設定を変えて、PHPのバージョンを7.1に変更すると、突如エラーが発生しました。

Parse error: syntax error, unexpected 'new' (T_NEW) in /xxxx/wp-content/plugins/exec-php/exec-php.php on line 22

これは、投稿記事内でPHPのコードを実行出来るようにするプラグイン「Exec-PHP」がPHP7.1以降に対応していないためのエラーです。
PHP7.1では、変数にクラスの参照代入ができなくなったためだそうで、プラグインのソースコードそのものに問題があることを示しています。

対策として、代わりのプラグインも試しましたが、同様にエラーが出たり、古すぎてWordPressの管理画面からは探せなかったりしてイマイチ。

ということで、ひとまず、Exec-PHP のコードそのものを変更して対処することにします。
プラグインのコードを変更するにはFTPクライアントなどから直接ファイルを開きます。
まずは、エラーの出ている、exec-php.phpを編集。

/wp-content/plugins/exec-php/exec-php.php

このファイルの22行目に、

$GLOBALS['g_execphp_manager'] =& new ExecPhp_Manager();

とありますので、 =& の &を削除します。

$GLOBALS['g_execphp_manager'] = new ExecPhp_Manager();

でも、これをしてもまた新たなエラーが発生します。

Parse error: syntax error, unexpected 'new' (T_NEW) in /xxxx/wp-content/plugins/exec-php/includes/manager.php on line 36

こんどは、manager.phpに問題があるようです。
/wp-content/plugins/exec-php/includes/manager.php
を開くと、36,37,38,39行目に同様に=&があります。

$cache =& new ExecPhp_Cache();
 $this->m_ajax =& new ExecPhp_Ajax($cache);
 $this->m_runtime =& new ExecPhp_Runtime($cache);
 $this->m_admin =& new ExecPHP_Admin($cache);

これも&を削除します。

$cache = new ExecPhp_Cache();
 $this->m_ajax = new ExecPhp_Ajax($cache);
 $this->m_runtime = new ExecPhp_Runtime($cache);
 $this->m_admin = new ExecPHP_Admin($cache);

他にも、

/wp-content/plugins/exec-php/includes/cache.php の22行目、39行目
/wp-content/plugins/exec-php/includes/ajax.php の64行目

にそれぞれ &= となっているところがあるので修正します。

これでエラーは出なくなります。

 

0

[BackWPup]エラー「ステップを中止: 回数が多すぎます!」の解決策

WordPressでデータを定期的にバックアップする、便利なプラグインBackWPupですが、あるサーバーで運用中のWPで、バックアップを実行した処、こんなエラーが出ました。

エラー: MySQLi 拡張モジュールが見つかりませんでした。それをインストールしてください。
エラー: ステップを中止: 回数が多すぎます!

原因は「PHPのMySQLi拡張モジュールがないから」。

なので、MySQLi拡張モジュールを導入すればいいのですが、多くのレンタルサーバーではそういう操作はできません。ただし、PHPのバージョンを上げることで対策できる場合もあるようです。

たとえば、ロリポップなら管理画面の「PHP設定」で変更できます。もし、バージョンが5.3以下だったら、それ以上のバージョンに上げると解決します。

ロリポップ管理画面のPHP設定でバージョンを変える。

ただし、中にはPHPのバージョンを上げることができない、不便なレンタルサーバーを利用している場合や、スペックの低い専用サーバーを使い続けざるを得ない、なんてこともあります。

そんなときは、BackWPupの設定を変えます。

BackWPupのジョブタクス設定

データベースの内容そのものではありませんが、記事やコメントなど主要な情報が復元できるので、ひとまずこれで対処できます。

 

0

Contactform7 でinputタグにautofocusを追加する

Contact form 7 で、出力されたinputタグに autofocus を追加する方法です。

現時点(2017年11月)では、Contact form 7には、autofocus属性を指定する方法はないようです。

正攻法では、なかなかいい方法がありません。そこで、class名にautoforcusを指定すると、autoforcus属性が追加されるようにします。

まずは、function.phpに以下を追記します。

add_filter( 'wpcf7_form_elements', 'my_wpcf7_form_elements' );
function my_wpcf7_form_elements( $content ) {
 $str_pos = strpos( $content, 'autofocus"' ) + strlen('autofocus"');
 $content = substr_replace( $content, ' autofocus ', $str_pos, 0 );
 return $content;
}

このコードでやっていることは、class="wpcf7-form-control wpcf7-text wpcf7-validates-as-required autofocus" などと表示される部分の 「autofocus"」を見つけて、その後ろに「 autofocus 」を挿入しています。かなり強引ですが。。。

使い方ですが、たとえば、

[text* your-name class:autofocus]

のようにつかいます。

もし、他にclassを指定しているのなら、autofocusが最後になるようにしてください。

例:[text* your-name class:hogehoge class:autofocus]

 

0