phpエラー(function.phpのカスタムポスト追加の記述で)

Filed under: functions.php,php,wordpress — kdcs @ 19年8月9日 金曜日

WordPress カスタムポストのパーマリンク(アンカータグ)に
「Notice: Only variables should be assigned by reference in」というエラーが出て
カスタムポストの記事にアクセスできないという状況。

php5からphp7への移行で出るっぽいという記事があったが、エラーが出た環境はphp5.6
何故か他のWordPressサイトではエラーは出ない・・・

修正箇所は、function.php内、カスタム投稿タイプ「○○○」のパーマリンク設定
参照渡しで値を配列に渡している部分

$post = &get_post($id);

これを以下に修正

$post_tmp = get_post($id);
$post = $post_tmp;

さらに、function.php内、一覧にカスタムフィールドの「お名前」を追加

echo attribute_escape($stitle);

attribute_escapeは非推奨とのことでesc_attr()を使用

echo esc_attr($stitle);

※追記 2021年10月9日
php 7.4環境でWordPress 5.7.2を使ったサイト制作時(眼鏡店)にデバッグモードで上記の状態発生
修正の記述で解決。

Contact Form 7 日本語で入力してください(海外からのスパムメール対策)

Filed under: contactform7,functions.php — kdcs @ 19年7月30日 火曜日

日本語で入力しないとエラーになる海外からのスパムメール対策

function.phpに記述する
下記の例はタイトル(your-subject)に日本語が含まれない場合にエラーとする

function wpcf7_validate_spam_message( $result, $tag ) {
  $value = str_replace(array(PHP_EOL,' '), '', esc_attr($_POST['your-subject']));
  if (!empty($value)) {
    if (preg_match('/^[!-~]+$/', $value)) {
      $result['valid'] = false;
      $result['reason'] = array('your-subject' => '日本語で入力してください');
    }
  }
  return $result;
}
add_filter( 'wpcf7_validate', 'wpcf7_validate_spam_message', 10, 2 );

WordPress 購読者をログインさせる簡易会員制サイト

Filed under: functions.php,wordpress — kdcs @ 19年2月9日 土曜日

WordPressの会員制プラグイン「theme my login」は最新版で有料化されたので、簡易的な会員制(新規会員登録や会員の振り分けなど必要ない)にするだけの場合はプラグインを使わずにfunction.phpに実装する方法。

会員向けのページは全てテンプレートに以下を記述

<?php if (!is_user_logged_in()){auth_redirect();} ?>

この記述により、サイトへアクセスするとログインフォームへリダイレクトされる

function.php

//ゲストログイン--------------------------------------------------------------------------
add_action( 'auth_redirect', 'guest_go_to_home' );
function guest_go_to_home( $user_id ) {
	$user = get_userdata( $user_id );
	if ( !$user->has_cap( 'edit_posts' ) ) {
		wp_redirect( get_home_url() );
		exit();
	}
}

フィードの配信を停止させる。(フィード内に記事の内容が書き出されるため)
function.php

//フィード(rssやAtom)の配信を止める ----------------------------------------------------
remove_action( 'do_feed_rdf', 'do_feed_rdf');
remove_action( 'do_feed_rss',  'do_feed_rss' );
remove_action( 'do_feed_rss2', 'do_feed_rss2' );
remove_action( 'do_feed_atom', 'do_feed_atom' );

WordPressのメディアアップロードでの画像自動生成を停止する

Filed under: functions.php,wordpress — kdcs @ 18年8月24日 金曜日

ロリポップが「WEBサーバーに設置できるファイル数」に上限を設定

WordPressでは画像をアップロードする際、デフォルトでは「サムネイル・中・大・フルサイズ、768px画像」と5つのファイルがuploadフォルダ内にできてしまう。

このため、WordPressのメディアアップロードでの画像自動生成を停止させる手段がこちら
function.phpに記述

//メディアアップロードサイズ自動生成停止 ------------------------------------------------
function remove_image_sizes($sizes) {
  unset( $sizes['thumbnail'] );
  unset( $sizes['medium'] );
  unset( $sizes['large'] );
  return $sizes;
}
add_filter( 'intermediate_image_sizes_advanced', 'remove_image_sizes' );

768pxサイズの画像自動生成を停止させるにはfunction.phpに以下を記述

// レスポンシブイメージ自動生成の無効化(WordPress4.4以降)-------------------------------
update_option( 'medium_large_size_w', 0 );
// レスポンシブイメージsrcset挿入の無効化(WordPress4.4以降)-----------------------------
add_filter( 'wp_calculate_image_srcset', '__return_false' );

WordPressに埋め込んだyoutube動画のサムネイル取得と利用

Filed under: functions.php — kdcs @ 18年4月6日 金曜日

youtubeの動画にはサムネイル画像が用意されているので動画IDから取得し利用できる

function.phpに以下を記述

//youtubeの動画サムネイル画像を取得する---------------------------------------------------
function youtube_tumbnail() {
$youtubePost = esc_attr(get_the_content());
preg_match('/www.youtube.[-_\/A-Za-z0-9]*/', $youtubePost, $youtubeUrl);
$youtubeId = str_replace("www.youtube.com/embed/","",$youtubeUrl[0]);
 if (isset($youtubeUrl[0])){
    echo "<a href='" .esc_url(get_permalink()). "'>";
    echo "<img class='y_thumbnail' src='http://img.youtube.com/vi/$youtubeId/0.jpg'></a>";
// URL貼り付けで埋め込んだ投稿が含まれる場合は以下のコードも追加
} elseif(preg_match('/watch/', $youtubeUrl[0])) {
    preg_match('/www.youtube.[-_?=\/A-Za-z0-9]*/', $youtubePost, $pasteUrl);
    $pasteId = str_replace("www.youtube.com/watch?v=","",$pasteUrl[0]);
    echo "<a href='" .esc_url(get_permalink()). "' class='tumbnail230'>";
    echo "<img class='y_thumbnail' src='http://img.youtube.com/vi/$pasteId/0.jpg'></a>";
// URL貼り付けで埋め込んだ投稿が含まれる場合のコードここまで
} else {
    echo "<a href='" .esc_url(get_permalink()). "'><img src=' ".esc_html(get_bloginfo('template_url'))."/images/youtube-default.png'></a>";
  }    
}

テンプレートにてサムネイル画像を呼び出すには以下を記述

<?php youtube_tumbnail()?>

サイト内検索

カテゴリー

最近の投稿

↑上に戻る