wordpress 6.0 wp_insert_postでうまく入らない

php8.0なのかwordpress6.0なのかわからないけど、オブジェクト型はそのまま引数に使用できなくなっていた。

$itemにいろいろな情報を入れて引数にしていたので、そのまま使っていたのがいけなかったらしい。

<誤>

‘post_status’ => $item -> status,
‘post_date’ => $item -> post_date,
‘post_date_gmt’ => $item -> post_date

<正>

‘post_status’ => (string)$item -> status,
‘post_date’ => (string)$item -> post_date,
‘post_date_gmt’ => (string)$item -> post_date

 

 

【症状】

ロリポップphp7.1モジュール版を使用していて、急にサーバーメンテナンスで勝手に7.1CGI版になってしまい古いwordpress4.9.*くらいみたいなやつが完全に動かなくなったので、FTPで無理やり仕方なくwordpress6.0にしてphp8.1CGI版にしたらwp_insert_postで入らなかった感じ。

特にpost_status、post_date_gmt、post_dateにどうしても変な値が入るので動かなかった。

原因がわかるとあぁ…何ですよね。

「明日から”あだ名”は禁止です。フルネームで呼びましょう」って言われた小学生の気持ちです。

 

 

ContactForm7で送信完了画面に飛ばす最低な方法

いろいろな方法があるけど、
なんやかんやとうまくいかないので、かなり初心に帰った基本中の基本の方法です。

次の内容をfunction.phpに入れるだけです。

 

add_action( ‘wp_footer’, ‘add_thanks_page’ );
function add_thanks_page() {
  if( get_the_ID() == ‘9’ ) {
    echo <<< EOD
<script>
let search_query = document.getElementById(“wpcf7-f5-p9-o1”).innerHTML;
if(search_query.indexOf(‘ありがとうございます。メッセージは送信されました。’) != -1){
  location = ‘飛ばしたいページの’;  
}
</script>
EOD; }}

 

ざっくりいうと

1.post_id=9の場合、これをページ末に記述します
2.「wpcf7-f5-p9-o1」というIDのDIVを探して
3.その中に「ありがとうございます。メッセージは送信されました」の文字があったら飛ばす。

というだけです…

 

jQueryとかも使っていなくてカッコよくないけど、とりあえず動けばヨシ! by.現場より

 

Contactform7のほうでサンキューメッセージを変えていたら
indexOfの部分を変えればOK

 

WordPressユーザー登録パスワードが出ない

タイトル通りです。

ユーザー登録やパスワード変更の際に「パスワードを表示」ボタンを押しても入力部分が出ないでスカスカした動きになる状況。

 

解決方法案

ほとんどのWordpressで使用していると思われるAdvanced Custom Fieldsのプラグインとぶつかっていました。

 

停止させたら動きました!

 

原因

phpのバージョンが7以下の古いものだと上記のようなことが起こるらしいです。

同じ環境でphp7のサーバーだったら正常に動いたサイトもありました。

 

WordPress 改行させない単語にするタグをTinyMCE Advancedに追加

備忘録です。画像は11月にUPします。

 

TinyMCE Advanceに改行させたくない単語設定を追加する方法です。

 

1.TinyMCE Advanceの設定画面で「スタイル」を表示させるようにします。

2.functionに次のように記述。

function custom_editor_settings( $initArray ) {

	$my_style_formats = array(
			array(
			'title' => '改行させない単語',
			'inline' => 'span',
			'classes' => 'word-no-line',
			)
		);

	$initArray['style_formats'] = json_encode($my_style_formats);

	return $initArray;
} 
add_filter( 'tiny_mce_before_init', 'custom_editor_settings' );

 

3.CSSに次のクラスを追加

.word-no-line{
	display:inline-block;
}

 

4.投稿画面で改行させたくない単語を選択して「スタイル」で「改行させない単語」を選択する

 

おまけ:
ビジュアルエディタで使用するCSSの設定をしているなら、そっちにも上記の.word-no-lineを追加しておいたほうがいい。
ついでにcolor:#a00;とかにしておくと赤っぽくなってわかりやすい。

WordPress Contact Form7の必須入力のメッセージで色を付けるて改行させない

とても便利で分かりやすくて使いやすいメールフォームのContact From 7!最高です!

ですが、必須項目に入力をしなかったときにメッセージが出るとき、cssとかで無理やり横配置した入力ホームが改行されてズレてしまうので、
「必須項目に入力してください。」メッセージを出さないで、入力部分のみを赤くして入力してほしい場所を知らせる方法です。

 

現象の画像

どういうことかというと

こういう風に配置した入力項目で入力しないで送信すると

こうなります。

「必須項目に入力してください。」が長いのかと思って短くしても

こうなります。

 

修正方法

cssにこの2つを追加してください

.wpcf7 .wpcf7-not-valid {background:pink;}
.wpcf7 .wpcf7-not-valid-tip{display:none;}

すると、こうなります

よし!

 

ちなみにCSSを修正したら、メールフォームを表示しているページで「ctrl+f5」で再読み込みをしてください。

 

記載する場所は、サイトで使用しているCSSでcontactForm7より後に読み込まれる場所に記述です。

多分管理画面の「外観」「テーマの編集」のCSSで行けると思います。

 

wordpress「Advanced Custom Fields」で記事以外に設定した中身の取得方法

Advanced Custom Fieldsでタグとかカテゴリーに追加した項目の取得方法の備忘録
タクソノミースラッグは下記の緑の部分。

 

■タグの場合(tag.phpなどで)

$term = get_term_by(‘slug’ , $tag , “post_tag”);

$PAGE_TITLE = get_field(‘一覧ページのタイトル’ , ‘post_tag_’ . $term->term_id);

 

■カテゴリの場合(category.phpなどで)

$PAGE_TITLE = get_field(‘一覧ページのタイトル’ , ‘category_’ . $cat);

 

ACFはタグとかにも設定できるから便利ですね…

 

WordPressサーバー移動したら動かなくなった

サーバーを移動したら動かなくなる。
phpのバージョンを上げたら動かなくなる。
エラーが出る、白くなる。何も表示されない。

 

移動先phpのバージョンが7だと、loopろかswitch以外にbreakを使うとエラーがでます。

 

.htaccessに「php_flag display_errors On」と記述するとphpのエラーが表示されます。

そこでこんなメッセージが↓

Fatal error: ‘break’ not in the ‘loop’ or ‘switch’ context in

 

今回、Let’s Encryptとか無料SSLに対応していない高額サーバーから対応している激安サーバーに移動をしたら怒りました。

旧サーバーでのphpMyAdminはバージョン3.2.3…

なんてこった…古すぎて使い方わかんなかった

 

 

 

wordpress検索結果とか5件しか出ない

ページネーションを入れるために今まで一括表示していたのを分割表示するようにしました。

なんやかんやの追加処理をしているのでページの表示には「get_posts」を使用していたのですが、設定画面で設定した件数が出てこないで5件しか出てこない!

 

ツボっていたらわかりました

https://www.sriproot.net/blog/get_posts-posts_per_page-1337

ざっくり言うと

「get_posts」は
指定しなければ
5件しか出ない!

 

「get_posts」の件数は
「表示設定」の
「フロントページの表示」ではない!

 

いつから!?

初めて知ったわ!

 

‘posts_per_page’ => get_option(‘posts_per_page’),

を追加すると、設定画面と同じ件数が表示されます。

WordPress投稿画面のタグの文字をそろえる

管理画面の投稿でタグを「よく使われているタグから選択」を押したときに出てくるタグの表示がタグクラウドではなく、同じ文字サイズで統一して表示したい時の方法です。

 

WordPressの改造

/wp-includes/category-template.phpの

925行目あたりの

'<a href="%1$s"%2$s class="%3$s" style="font-size: %4$s;"%5$s>%6$s%7$s</a>',

みたいなところで「 style=”font-size:」を設定していますから、その部分を削除すればよいです。

 

バージョンによって記述がちがうので「font-size:」で検索をして場所を特定してください。

 

WordPress4.7.nの例です

'<a href="%1$s"%2$s class="%3$s" style="font-size: %4$s;"%5$s>%6$s%7$s</a>',

'<a href="%1$s"%2$s class="%3$s" %5$s>%6$s%7$s</a>',

に変更します。

 

投稿画面でタグの表示は統一のほうがいい?

新しいタグだと、どうしても記事が少ないので小さくなって見えにくくなってしまいます…
例えばニュースとかだと「昭和」「平成」のニュースはたくさんあるけど「令和」のニュースはそんなにないのでどうしても小さくなりがちです…

昭和 平成 令和

こんな感じになると思います。

その場合には、全部同じ大きさのほうが編集はしやすいです。

昭和 平成 令和

実際、既存のタグなんていちいち入力するのも面倒だから既存のものをポチッとクリックで入れ込みたいわけですよ…

 

ついでにタグを常に表示する方法

こちらに詳細がありました。
http://milkveil.com/archives/4027

 

リンクが切れた時の備忘録としてざっくりまとめると、
テーマのfunction.phpに次を追加すると常に表示されるようになります。

function enlargetagcloud($args,$taxonomies){
	if(DOING_AJAX && $_POST['action']=='get-tagcloud'){
		$args['number']=100;
	}
	return($args);
}
add_filter('get_terms_args','enlargetagcloud',10,2);


function my_admin_head(){
echo
'<script type="text/javascript">

    jQuery(function( $ ){ 
        $("#link-post_tag").each( function(){
            tagBox.get( $(this).attr("id") );
            $(this).html("").unbind().click(function(){
                $(this).siblings(".the-tagcloud").toggle();
                return false;
            });
            return false;
        });
    });

</script>';
}
add_action('admin_head', 'my_admin_head');