WordPress会員サイトをプラグイン無しで

Filed under: functions.php,wordpress — kdcs @ 22年3月28日 月曜日

Themes My Loginが有料化されたので簡単な会員サイトをプラグイン無しで構築する方法
デフォルトのページを会員用にし、カスタム投稿タイプで会員・非会員どちらもアクセスできる
コンテンツを作成する。

※会員のアカウント(ID password)は事務局が作成

会員がアクセスするページはすべてログイン必須にする
テンプレート(home.php category.php archive.php single.php)に以下を記述

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

会員の権限は「購読者」とし、ログイン先は会員ページ(home.php)とする
会員ページのスラッグは「member」で表示設定にて「投稿ページ」に指定する
function.phpに以下を記述

/* ---------------------------------------------------------------------------------------
   ◆◆◆ 会員(購読者)ログイン時のリダイレクト先設定 ####################################
------------------------------------------------------------------------------------------*/
add_action( 'auth_redirect', 'subscriber_go_to_home' );
function subscriber_go_to_home( $user_id ) {
$user = get_userdata( $user_id );
if ( !$user->has_cap( 'edit_posts' ) ) {
$url = site_url('/member/');
wp_redirect( $url );
exit();
  }
}

WordPress 5.5から追加されたwp-sitemap.xmlを無効化する

Filed under: functions.php,wordpress — kdcs @ 22年1月29日 土曜日

WordPress 5.5から追加されたwp-sitemap.xmlはurlの情報しか無い
更新日時などの情報が付与されないのでxmlのsitemapプラグインを使用している場合は、自動で作成されるwp-sitemap.xmlを無効化する。

以下をfunction.phpに記述
※アクセスするとトップページにリダイレクト

remove_action( 'init', 'wp_sitemaps_get_server' );

wp-sitemap.xmlにアクセスさせたくない場合(こちらは使う意味無いと思う)
※アクセスすると404エラーになる

add_filter( 'wp_sitemaps_enabled', '__return_false' );

WordPress 投稿記事の最初の画像のサムネイルを取得して表示させる-2022年版

Filed under: functions.php,wordpress — kdcs @ 22年1月18日 火曜日

wordpress5.7.3で投稿記事の最初の画像のサムネイルを取得して表示させる動作が不安定になり、表示出来たりできなかったりしたため、過去のコードを見直した。

preg_match_allの記述を変更

変更前

preg_match_all('/<img.+?class=".+?wp-image-(.+).*?".*?>/i', $post->post_content, $matches);

変更後

preg_match_all( '/<img.+class=[\'"].*wp-image-([0-9]+).*[\'"].*>/i', $post->post_content, $matches );

function.phpにこちらを記述する(全体)
記事内に画像が無い場合の代替画像「default1.png」

/* ---------------------------------------------------------------------------------------
   ◆◆◆ 投稿記事の最初の画像のサムネイル ?php echo my_first_image_thumb(); ? で表示 ####
------------------------------------------------------------------------------------------*/
function my_first_image_thumb(){
  global $post, $posts;
  $img_url = '';
  //デフォルト画像の設定
  $defaute_url = get_stylesheet_directory_uri(). '/images/default1.png';

  //最初の画像を取得してIDを取得
  preg_match_all( '/<img.+class=[\'"].*wp-image-([0-9]+).*[\'"].*>/i', $post->post_content, $matches );
  if(isset($matches[1][0])){
    $img_id = ($matches[1][0]);
  }

  //最初の画像があれば分岐
  if(!empty($img_id)){
    //最初の画像IDからサムネイルのパスを取得してセット
    $img_url = my_wp_get_attachment_medium_url($img_id);
  } else {
    //最初の画像がない場合、デフォルト画像のパスをセット
    $img_url = $defaute_url;
  }
  return $img_url;
}

  //画像IDからサムネイルサイズのパスを取得(画像サイズ変更可能)
  //画像サイズ (thumbnail, medium, large, full or custom size)
function my_wp_get_attachment_medium_url( $id ) {
  $thumbnail_array = image_downsize( $id, 'thumbnail' );
  $thumbnail_path = $thumbnail_array[0];
  return $thumbnail_path;
}

ページ内の表示させたい部分に以下を記述

<img src="<?php echo my_first_image_thumb(); ?/>">

(続きを読む…)

Contact Form7で送信後に送信完了ページを表示させる

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

メールフォームの送信ボタンをクリックした時、正常に送信されたら送信完了ページを表示したい場合

function.phpに記述する方法

$contact = 'contact';
$thanks = 'thanks';

//お問い合わせフォームの送信後にサンクスページへ飛ばす
add_action( 'wp_footer', 'redirect_thanks_page' );
function redirect_thanks_page() {
  global $contact;
  global $thanks;

  if( is_page($contact)  ) {
  ?>
  <script>
    document.addEventListener( 'wpcf7mailsent', function( event ) {
      location = '<?php echo home_url('/'.$thanks); ?>'; // 遷移先のURL
    }, false );
  </script>
  <?php }
}

html内に記述する方法

<script>document.addEventListener('wpcf7mailsent',function(event){ location='//example.com/thanks/'; },false);</script>

WordPress 投稿一覧で項目の並び順を変える

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

投稿一覧の並び順を変えたい場合、function.phpに以下を記述

//投稿一覧の並び順を変更する--------------------------------------------------------------
function sort_posts_columns( $columns ) {
  $columns = array(
    'cb'         => '<input type="checkbox" />',
    'title'      => 'タイトル',
    'author'     => '作成者',
    'categories' => 'カテゴリー',
    'tags'       => 'タグ',
    'comments'   => '<div class="comment-grey-bubble" title="コメント"></div>',
    'date'       => '日時'
  );
  return $columns;
}
add_filter( 'manage_posts_columns', 'sort_posts_columns' );

※カスタム投稿タイプの場合(例:itemsというスラッグ)
 カスタム投稿タイプは専用のカテゴリーやタグのスラッグが作られるので、それに合わせる
 add_filter()内のmanage_~もカスタム投稿タイプに合わせる

function sort_posts_columns( $columns ) {
  $columns = array(
    'cb'         => '<input type="checkbox" />',
    'title'      => 'タイトル',
    'author'     => '作成者',
    'items_category' => 'カテゴリー',
    'tags'       => 'タグ',
    'comments'   => '<div class="comment-grey-bubble" title="コメント"></div>',
    'date'       => '日時'
  );
  return $columns;
}
add_filter( 'manage_items_posts_columns', 'sort_posts_columns' );

※重要
なお、デフォルトの投稿タイプにカスタム投稿タイプを追加する場合、
function名が重複しないようにナンバーを付けるか名前を変える

サイト内検索

カテゴリー

最近の投稿

↑上に戻る