WordPress のカスタマイズ覚書

10月 9, 2020

WordPressをカスタマイズした際に使用した、プログラムコード断片の覚書です。


目次

管理者以外がログイン時に、管理バーを表示させない

管理バーが出ると、ユーザ情報を更新できてしまうためです。

function my_function_admin_bar($content) {
 return ( current_user_can("administrator") ) ? $content : false;
}
add_filter( 'show_admin_bar' , 'my_function_admin_bar');

ログインしていない時は、投稿一覧ページはトップ画面にリダイレクトします

WP-Menmbersで制限を掛けても、投稿一覧が表示されるためです。

function un_logged_in_user_redirect() {
    if( ! is_user_logged_in()  && is_home() ) {
        wp_redirect( '/top' );
        exit();
    }
}
add_action( 'template_redirect','un_logged_in_user_redirect');

Contact Form 7でフォーム送信時にブログ投稿を行う

function wpcf7_insert_post(){
  $submission = WPCF7_Submission::get_instance();
  if($submission) {
    $formdata = $submission->get_posted_data();
    $uploaded_files = $submission->uploaded_files();
    $new_post = array(
      'post_type' => 'post',
      'post_title' => $formdata['title'] . '-' . $formdata['upload-date'],
      'post_status' => 'draft',
      'post_content' => print_r($uploaded_files, true)
      );
    $post_id = wp_insert_post($new_post);
    if(!is_wp_error($post_id)) {
      if (isset($uploaded_files['file-id1'])) {
        $file_path = '/wp/wp-content/uploads/'  . basename($uploaded_files['file-id1']);
        $file_id = addAttachmentFromForm($file_path, $uploaded_files['file-id1'], $post_id, $formdata['upload-date']);
      }
    }
  }
}
add_action('wpcf7_mail_sent', 'wpcf7_insert_post', 10, 1);

ファイルをメディアに登録する

function addAttachmentFromForm($filename, $file_base, $post_id, $upload_date) {
   $layout_img_value = '';

   $filetype = wp_check_filetype( basename( $filename ), null );
   $wp_upload_dir = wp_upload_dir();
    $upfile = $wp_upload_dir['url'] . '/' . $upload_date . '-' . basename( $filename );
    $copyfile = $wp_upload_dir['path'] .'/' . $upload_date . '-' . basename( $filename );
    copy($file_base, $copyfile);
    $attachment = array(
        'guid'           => $upfile,
        'post_mime_type' => $filetype['type'],
        'post_title'     => preg_replace( '/\.[^.]+$/', '', basename( $upfile ) ),
        'post_content'   => '',
        'post_status'    => 'inherit'
    );
    $attach_id = wp_insert_attachment( $attachment, $copyfile, $post_id );
    require_once( ABSPATH . 'wp-admin/includes/image.php' );
    $attach_data = wp_generate_attachment_metadata( $attach_id, $copyfile );
    wp_update_attachment_metadata( $attach_id, $attach_data );

    if($attach_id) return $attach_id;
    else return false;
}

絵文字は無効にし、サイトを高速化する

remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'wp_print_styles', 'print_emoji_styles' );

bbPressのトピック投稿エディタに、文字を初期表示する

function filter_topic_form_format( $bbp_code_trick_reverse ) {

  if(bbp_is_single_forum()) {
	$content = '文字を初期表示する';
    return $content;
  } else {
    return $bbp_code_trick_reverse;
  }
}
add_filter( 'bbp_get_form_topic_content', 'filter_topic_form_format', 10, 2 );

bbPressのトピック投稿画面で、オプションを非表示にする

2020/10/9追記:bbPressの設定で、使用するか否かが選択可能でしたので、下記は不要でした。

label[for="bbp_topic_tags"],
label[for="bbp_stick_topic"],
label[for="bbp_topic_status"],
label[for="bbp_topic_subscription"],
#bbp_topic_tags,
#bbp_stick_topic_select,
#bbp_topic_status_select,
#bbp_topic_subscription {
	display:none !important;
}
:has()

CSS擬似クラスの:has() が使えれば、半分のコードで済むのですが、現在(2020/10/5)は主要ブラウザは未対応です。https://developer.mozilla.org/ja/docs/Web/CSS/:has

メディアファイルへのアクセスは、サイト内からだけ許可する

uploadsディレクトリに、.htaccessを設置して、メディアファイルへのアクセスをサイト内からのリンクだけ許可するようにします。

サイトがログインによって制限させた場合に、url直接アクセスの抜け道を塞ぐためです。

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTP_REFERER} !^https://(www\.)?example\.com/ [NC]
    RewriteRule ^(.*)$ - [F,L]
</IfModule>

WordPress

Posted by iwadjp