カテゴリー
その他

.htaccessでIP制限(Apache2.4系)

たぶん数か月後忘れてしまって「動かねぇ…」案件になるのでメモ。

Apache2.4系から記述が変更になったっぽい。
Require ipの後に、アクセス可能なIPアドレスを入力する。

Require all denied
Require ip xxx.xxx.xxx.xx

特定のファイル(例:wp-login.php)に制限したいとき、

<Files wp-login.php>
Require ip xxx.xxx.xxx.xx
</Files>

参考元サイト
Apache 2.4系でIP制限の設定方法
https://ex1.m-yabe.com/archives/2154

カテゴリー
WordPress

fetch feed関数でRSSを取得する

WordPressのfetch feed関数でRSSを取得しました。忘れないうちにメモ。

表示させたいとこへ以下。
※下記のコードは、ACFのリピーターフィールドを指定してるけど、$rss_feedにURLを指定すればよい。

	  	<?php while(the_repeater_field('rss_feed')):
	$rss_feed[] = get_sub_field('rss_url');
	endwhile;
	rss_prog($rss_feed);?>

Functions.phpに以下。htmlの部分は適当に修正する。preg_matchで画像を見つけてサムネイルにしてる。

<?php
//RSS表示
function rss_prog($rss_feed){
  include_once( ABSPATH . WPINC . '/feed.php' );
  $rss = fetch_feed($rss_feed);
  $maxitems = 0;
if ( ! is_wp_error( $rss ) ) : // ちゃんとフィードが生成されているかをチェックします。
    $maxitems = $rss->get_item_quantity( 5 ); 
    $rss_items = $rss->get_items( 0, $maxitems );

endif;
  ?>
<ul class="news-list">
    <?php if ( $maxitems == 0 ) : ?>
        <li>記事がありません</li>
    <?php else : ?>
        <?php // Loop through each feed item and display each item as a hyperlink. ?>
        <?php foreach ( $rss_items as $key => $item) :
        $first_img = '';
  if ( preg_match( '/<img.+?src=[\'"]([^\'"]+?)[\'"].*?>/msi', $item->get_content(), $matches ) ) {
        $first_img = $matches[1];
}?>
            <li><div class="news-img c-col5">
			     <?php if (!$first_img) : ?>
			  <img src="<?php echo get_template_directory_uri(); ?>/image/noimage.png">
    <?php else : ?>
<img src="<?php if($first_img) : echo esc_html( $first_img ); else: "";endif; ?>" width="100" height="60">
	 <?php endif; ?></div><div class="news-text c-col6">
                <p class="n-tit"><a href="<?php echo esc_url( $item->get_permalink() ); ?>"
                    title="<?php printf( __( 'Posted %s', 'my-text-domain' ), $item->get_date('j F Y | g:i a') ); ?>">
				  <?php echo esc_html( $item->get_title() ); ?></a></p>
			  <p class="n-info"><?php echo $item->get_feed()->get_title(); // サイト名 ?><?php echo $item->get_date('j F Y | g:i a'); // サイト名 ?></p>
                
			  </div></li>
        <?php endforeach; ?>
    <?php endif; ?>
</ul>
<?php
}

関数リファレンス/fetch feed
https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/fetch_feed

カテゴリー
WordPress

ユーザーアバターの表示方法

表示させるだけなら。

$current_user = wp_get_current_user();
echo get_avatar($current_user-&gt;ID, 56);

色々こねこね。

$current_user = wp_get_current_user();
              $args = array(
                  'height'    => '56',
                  'width'     => '56',
                  'class'     => array('img-class', 'profile-class')
              );
              $alt = $current_user->user_firstname . '\'s Avatar';
              printf( '<a href="%s">%s</a>', get_edit_user_link($current_user->ID), get_avatar($current_user->ID, 56, null, $alt, $args) );

関数リファレンス/get avatar
https://wpdocs.osdn.jp/関数リファレンス/get_avatar

カテゴリー
その他

httpからhttpsへのリダイレクト

.htaccessに記述。こんな感じでしたでしょうか。

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>

SSL化とかでちゃんとやるなら、HSTSを使いましょう。とのことです。

カテゴリー
WordPress

画像やファイルへの直リンクを防ぐ

会員用サイトなどで、ログイン制にしても画像への直接リンクは見えてしまいます。
下記の.htaccessをuploadフォルダへ設置すればOK。

.htaccess

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?sample.com/ [NC]
RewriteRule .(jpg|jpeg|png|gif|pdf|xlsx|zip|pptx)$ - [NC,F,L]
</IfModule>

※RewriteCondのドメインは適時変更してください。

カテゴリー
WordPress

カスタム投稿名を出力

カスタム投稿名(ラベル名)を一発出力!メモー。

<?php echo esc_html(get_post_type_object(get_post_type())->label); ?>

以上!

但し、投稿がないと表示されないので注意(少しはまった)。

カテゴリー
WordPress

URLをショートコードに登録する

メモ。WordPressでホームのURL等をショートコードに登録する。
記事投稿や固定ページで[url]を書くとホームURLが取得できる。

function getUrl(){
	return esc_url( home_url(  ) );
}

add_shortcode( 'url', 'getUrl');

function getTemplateUrl(){
	return get_template_directory_uri();
}

add_shortcode( 'template_url', 'getTemplateUrl');

カテゴリー
WordPress

メディアのデータを一括削除する方法

WordPressのメディアに登録済の3000件のデータを削除する必要があり、
ぽちぽち20件ずつ削除していたのだが、自分の愚かさにハッとなり、検索してみた。
下記、引用です。

https://ja.forums.wordpress.com/topic/986
メディアを削除する方法

サイト全体を空にする(投稿・コメントなども含めて)という操作はこちらで行うことが可能ですが、画像「のみ」をすべて削除というオプションは申し訳ありませんが現在ありません。
一つ少し楽にできる方法は、メディアライブラリページの一ページごとの表示数を変えるというやり方です。

1. メディアライブラリの一覧ページで、右上の「表示オプション」タブをクリック
2. 上部にメニューが表示されるので、その中の「メディア」の数を100や200など大きいものに変更する(デフォルトは20)
3. 「表示オプション」タブを閉じ、一括選択して消去の操作を行う

ということで、右上の表示オプションから「ページごとに表示する項目数」を増やし、
無事作業を終えることができました。ありがとうございます。

カテゴリー
WordPress

IPによって表示するディレクトリを変える

あるサイトにWordPressを入れる案件で、ダウンタイム無しで作業する必要があった。色々方法はあると思うのだけど、IPによって見る場所を変える方法で対応しました。.htaccessの上のほうに下記の記述をおこないます

RewriteEngine on

RewriteRule ^xxx/xxx/.*$ - [NC,L]//適応除外ディレクトリ

RewriteCond %{REMOTE_ADDR} !^111.111.111.62$//このIP以外だったら、
RewriteRule .* http://sample.co.jp/safe/ [R=302,L]//こっちへ飛ばす

特定のIP以外は/safe/へリダイレクト。
特定のIPから見た場合は、WordPressのindex.phpを見に行くようにしました。
WordPress化次第、上の記述をコメントアウトすれば完了です。

カテゴリー
WordPress

メニューのカレント表示

間違いあるかも。自分用メモなので取り扱い注意。

WordPressなら下記。sampleならcurrentをechoする。CSSのclassに入れればOK。

<?php if ( is_page('sample') ) { echo ' current'; } ?>

PHPなら下記なの?関数作る。あまりうまくないやり方っぽい。

/*メニューのカレント表示*/
function is_current( $uri = "" ) {
	$uri = trim( $uri, "/" );
	$request_uri = $_SERVER['REQUEST_URI'];
 
	if( $uri && strpos($request_uri."/", "/".$uri."/", 0) !== FALSE ) {
		return true;
	}
	$request_uri = trim(str_replace( "/index.php", "", $request_uri ), '/');
	if( !$uri && !$request_uri ) {
		return true;
	}
	return false;
}
 
function echo_current( $uri = "" ) {
	if(is_current( $uri )) {
		echo 'current';
	};
}

表示させたいところに下記。/sample/ならcurrent表示。

<?php echo_current("sample");?

echoする時は、エスケープすること。下は例。

echo esc_html( $str );