WordPressの逆引き作業メモ

このブログはWordPressで業務に使った時の自分の作業用のポイントメモです。

MW WP Formの日付フィールドの入力できる日を制限する

MW WP Formで日付を入力すると ui.datepicker.jsで日付の選択ウインドウが表示されます。

 

[mwform_datepicker name="date01" id="date01" class="date01" js="minDate: 3, maxDate: 9" size="30"]

 

選択出来る日を最小今日から3日後から9日後までに設定

f:id:jinkosky2009:20220129211826p:plain

日付の指定には、ui.datepicker.jsのオプション属性で使える指定をショートコードでも使う事ができます。

 

 

 

[mwform_datepicker name="date01" id="date01" class="date01" js="minDate: 3, maxDate: +2w" size="30"]

選択出来る日を最小今日から3日後から2週間後までに設定

f:id:jinkosky2009:20220129212157p:plain

 

[mwform_datepicker name="date01" id="date01" class="date01" js="minDate: 3, maxDate: +2m" size="30"]

選択出来る日を最小今日から3日後から2ヶ月後までに設定

f:id:jinkosky2009:20220129212435p:plain

 

WordPressで管理者以外は自分のアップした画像と共有パーツしかメディアに表示されないようにする

WordPressでもっとも運用で困るもののひとつに権限設定の緩さがあります。メディアのアップされた画像は他の編集者や画像をアップロードできるユーザーからも見えるし、場合によっては削除できてしまいます。

このメディアに現在ログインしているユーザーのアップされた画像以外を表示しないコードは、よく紹介されています。

 

$current_user = wp_get_current_user();
$user_role = $current_user->roles[0]; 

if ( $user_role != 'administrator' ) {
function display_only_self_uploaded_medias( $query ) {
        if ( $user = wp_get_current_user() ) {
        $query['author'] = $user->ID;
        }
        return $query;
    }
 add_action( 'ajax_query_attachments_args', 'display_only_self_uploaded_medias' );
 }

 

このコードをfunctions.phpに追記することで、ユーザーは自分のアップした画像やPDFしか表示されなくなります。

 

 

サイトによって、各ユーザーの共有の画像パーツなどを使う場合があります。

その場合は、共有パーツをアップするユーザーを作成し、そのユーザーのuserIDが5とすると

$query['author'] = $user->ID;

のところを

$query['author__in'] = array( 5, $user->ID );

とすることで、ログインユーザーと、ユーザーIDが5のユーザーのアップされたメディアソースを表示可能になります。

WordPressで子ページははずして、親ページだけの一覧を取得したい

投稿ページや、固定ページ、カスタム投稿ページでも親ページ、子ページはよく使います。 自分の子ページのリストを取得するQueryのコードはよく見かけます。

$parent_id = get_the_ID)();
$args = array(
'posts_per_page' => -1,
'post_type' => 'page',
'order' => 'ASC',
'post_parent' => $parent_id,
); $common_pages = new WP_Query( $args );

親ページを'post_parent'で指定して、その子ページの一覧を取得できます。

また、個別にそのページが子ページかどうかは

if ($post->post_parent ) {}

で判断できます。

サブジェクトにある一覧で子ページをはずして、一覧を取得したい場合のコードが以外にないのでメモしておきます。

'post_type' => 'page',
'post_parent' => 0,

と親ページに0を指定すると、親ページを持たないページのみが抽出されます。

子ページを単にニュースや投稿ではなく、違う使い方でリストからはずしたい時に使います。

 

 

 

WordPressでログインしたユーザーが管理画面で自分の記事しか表示させない

WordPressで困るのは権限設定。

ログインして編集できるユーザーが、他の記事も見えるし、編集できたりしてしまいます。

外部のライターや、権限を分割したい時にデフォルトでそのような機能がありません。

そこで、編集画面でそもそも自分の書いた記事以外は表示させないように

functions.phpに以下のコードを入れます。

function show_only_ownpost($query) {
    global $current_user;
    if(is_admin()){
        if(current_user_can('author') ){
            $query->set('author', $current_user->ID);
        }
    }
}
add_action('pre_get_posts', 'show_only_ownpost');

編集者、投稿者などのロールを変更する場合は

if(current_user_can('author') ){

の'author'を

'editor':編集者

'contributor':寄稿者

'subscriber':購読者

などに変更します。

 

 

 

 

WordPressでコメントを機能させない

WordPressは本来ブログを作成するためにCMSなのでコメント機能が最初から実装されていmます。WordPressの普及と共に企業サイトなどにも多く使用されています。

企業サイトで必要ないものにコメント機能があげられますね、会社概要のページにコメントつけて欲しいところはあまりありません。

個別の固定ページや投稿ページのコメントをオフにするのは

f:id:jinkosky2009:20210318150239p:plain

コメントを許可をオフにすることでそのページのコメントは非表示になります。

デフォルトをオフに

 新規にページを追加した際に、自動でコメントがオンになっている場合があります。なので、新規ページではデフォルトでオフにする場合は、
ダッシュボード>設定>ディスカッション

の「新しい投稿へのコメントを許可」をオフにすることで新規に制作したページのコメントがデフォルトでオフになります。

f:id:jinkosky2009:20210318150610p:plain

 

 

強制的にサイトごとコメントオフに

サイトでそもそも、コメント機能を使わない場合は、テーマのfunctions.phpに以下の記述を追加します。

 

/**
 * Comments Off
 */
add_filter( 'comments_open', '__return_false' );

これで、うっかり作成したページにコメント受付フォームが表示される事もありません。

 

作業確認用のブラウザのスーパーリロード

制作中にページを更新しても「変わってないんだけど?」なんて、やりとりもしばしば。

各ブラウザで特にCSSJavascriptなどが更新されない場合が多いため、そのページのキャッシュを読まずに全て新規で読み込ませるスーパーリロードを説明するのは面倒なので、このURLを送るようのメモ。

 

Chrome

Windows

Shift + 更新ボタン

Ctrl + 更新ボタン

Shift + F5

Ctrl + F5

Ctrl + Shift + R

Mac

Shift + 更新ボタン

Ctrl + Shift + R

Android

メニューから 履歴 > 閲覧データを削除 > データを消去

Safari

Mac

Shift + 更新ボタン

iOS

設定 > Safari > 履歴とWebサイトデータを消去

Firefox

Windows

Shift + 更新ボタン

Ctrl + F5

Ctrl + Shift + R

Mac

Shift + 更新ボタン

Ctrl + Shift + R

Edge

Windows

Ctrl + 更新ボタン

Ctrl + F5

 

 

 

 

WordPress5.5、WordPress5.6にアップデートしたらスライダーの挙動がおかしい場合

WordPress5.5や5.6にアップデートした場合、今まで動いていたjavascript,jQueryプラグインのスライダーが、うまく動かない場合があります。
Flexslider,bxSliderなどのフォーラムで、報告されています。

症状としてはローディングが終わらない、ページ送りをクリックしても反応しないなど。
数多くのsliderがプラグインなどで提供されているため、全部はあげませんが。問題がないものもあると思います。

Lazy-loadが原因?

いくつかの原因が考えられますが、一つに5.5から採用されたネイティブLazy-loadが原因の可能性があります。
このLazy-loadとは、ページ全体の画像を先に読むのでなくページの表示を先に行い、下の画像を遅延して順番に読み込むためユーザーがアクセスした際にファーストビューの表示が速くなりユーザービリティが向上するすぐれものです。
5.5からWordPress5はデフォルトでwidth 属性と height 属性があるimgタグに自動でloading="lazy"が追加されます。

  • 記事の中の画像
  • 抜粋の中の画像
  • テキストウィジェットの中の画像
  • アバターの画像
  • wp_get_attachment_image() を利用しているテンプレートの画像

などで、width 属性と height 属性がある画像にタグを追加します。

さて、ここで問題がおきます。
スライダーなどは、幅を設定したりするためにwidth 属性と height 属性を入れる場合があり、そこにもloading="lazy"が追加されてしまいます。
そして表示はされていないが、先にプリロードして幅はoverfloatのはみ出す部分を計算しようとしたりします。
ですが、読まれていないためスライドが動かなかったり、画像が読み込まれなかったりします。

上記のFlexslider,bxSliderなどの話がフォーラムで話されています。

Lazy-loadをオフに

もっとも簡単な解決方は、自動でloading="lazy"を追加するフィルターをオフにすることです。
以下の1行をfunctions.phpに追加します。

add_filter( 'wp_lazy_loading_enabled', '__return_false' );

 

 

 

コードを追加するのがスキルとして心配な方は以下のプラグインで、同じ機能です。

https://wordpress.org/plugins/disable-lazy-loading/

ただLazy Loadは有用な機能なので、スライドの問題をおこさずに使いたい場合は自動でタグをつけるものでなく、明示的にクラスやタグが付いたものをLazy Loadにするプラグインがありますので、そういうものを使うのもいいかもしれません。