LABE
フォーラムへの返信
-
フォーラム: 使い方全般
返信が含まれるトピック: 親のclassで判断して子要素の表示切替をしたい$(function(){})
は$(document).ready(function(){})
の略記なので、発火タイミングはDOM構築時のはずです。
つまり、スライダーなどを触る前に処理が終わってしまうのです。
そのスライダーは使ったことがないのですが、調べてみると「スライドしたとき」に発火するイベントslideChange
があるようなので、そのイベントに.on()
すればいけると思います。
コードは間違ってるかもなので、ご参考まで。var mySwiper = new Swiper('.swiper-container', { }); var mySwiper = documet.querySelector('.swiper-container').swiper; mySwiper.on('slideChange', function() { $('.swiper-container').children('.swiper-slide').each(function() { if($(this).hasClass('swiper-slide-active')) { $(this).children('.link').removeClass('hide'); } else { $(this).children('.link').addClass('hide'); } }); });
フォーラム: 使い方全般
返信が含まれるトピック: 最新記事順にターム一覧を並べて表示したいこういうことでしょうか。違ったらごめんなさい。
$the_term = $wp_query->get_queried_object(); // 子タームをすべて取得 $terms = get_terms(array( 'taxonomy' => $the_term->taxonomy, 'parent' => intval($the_term->term_id), )); // 記事の配列 $column_posts = array(); if ( $terms ) { foreach ( $terms as $term ) { // 子ターム毎に最新記事を1件だけ取得 $column_post = get_posts(array( 'posts_per_page' => 1, 'orderby' => 'date', 'order' => 'DESC', 'post_type' => 'column', 'tax_query' => array( array( 'taxonomy' => $term->taxonomy, 'terms' => intval($term->term_id), ), ), )); // 記事を配列に追加 $column_post = reset($column_post); if ( $column_post ) $column_posts[] = $column_post; } } if ( $column_posts ) { // 配列を最新順に整列 $column_posts = wp_list_sort($column_posts, 'post_date', 'DESC'); // ループ foreach ( $column_posts as $post ) { setup_postdata($post); ?> <div class="head_author cf"> <a href="<?php the_permalink(); ?>"> <?php echo get_the_title(); ?> </a> </div> <?php } // ループ終わり wp_reset_postdata(); }
フォーラム: 使い方全般
返信が含まれるトピック: カスタム投稿でのカスタムフィールドによるorderフォーラム: 使い方全般
返信が含まれるトピック: 先頭に固定表示させる方法カテゴリAのアーカイブページに対して
pre_get_posts
で「01」を除外し、カテゴリAを表示するテーマファイルを作り、その投稿一覧を表示する箇所の先頭に「01」を単独で表示させる。という方法を思いつきました。
フォーラム: 使い方全般
返信が含まれるトピック: header.phpなどはどこで分離すべき?ただindex.phpをアドレスに指定した場合はこれが表記されるのですよね。
多分されません。
リライト次第だと思いますが、たとえば俺のサイトでは/index.php
ではトップページ/
へリダイレクトされました。
/wp-content/themes/xxxx/index.php
ではリダイレクトされずエラーになります。また自分で好きはphpファイルをしていすることも可能なのですね。
できません。
ダッシュボードをご覧になればわかりますが、トップページの設定は「最新の投稿」と「固定ページ」のいずれかです。
前者はアーカイブページと同様(テーマファイルは別)で、後者は個別の固定ページの扱いです。フォーラム: 使い方全般
返信が含まれるトピック: header.phpなどはどこで分離すべき?サイトのトップページはダッシュボードの「設定 > 表示設定」の「フロントページ」で設定します。
初期設定では「最新の投稿」になっていると思います。
その場合、 front-page.php → home.php → index.php の優先順位でテーマファイルが使われます。
他のテーマファイルがなければ、どんなページも index.php で表示されることになります。get_template_part('hoge/navigation');
のhoge/navigation
は、 index.php に対する相対パスではありません。
テンプレートディレクトリ(テーマのフォルダ)のルートに対する絶対パスです。
index.php はルートに置かれるので、実質的には相対パスにも見えますが、上の階層は参照できません。フォーラム: 使い方全般
返信が含まれるトピック: header.phpなどはどこで分離すべき?いくつかWordPressに関して誤解されているようですね。
ドメインのルート / にアクセスした場合、ブラウザの仕様では index.php をリクエストしますが、WordPressでは「リライト」という仕組みによって「サイトのトップページ」に設定されたページを返します。
リライトはサーバー上に実体のないURLのアクセスに対してURLの構造から表示するべき内容を判別し、実体(PHP+データベースの内容)に置き換える仕組みです。
page.php は固定ページの内容を設定するファイルですが、これも「固定ページを表すURL」をリクエストされた場合にリライトによって実体である page.php の内容を返すのであって、URLが page.php になるわけではありません。get_template_part()
は .php と .html を自動判別しません。
ファイル名を必ず .php として扱います。
そもそもWordPressのテーマファイルに .html はありません。
テーマディレクトリに .html ファイルを含めて、それに直接アクセスすれば表示はできると思いますが、それはもはやWordPressのシステムの範疇ではありません。ちなみに
get_template_part()
はサブディレクトリのPHPをインクルードすることもできます。
その場合の書き方はget_template_part('hoge/navigation');
です。フォーラム: 使い方全般
返信が含まれるトピック: header.phpなどはどこで分離すべき?本文にたくさんの質問がありますが、あえてトピックタイトルの質問にお答えします。
WordPressにはテンプレート階層というものがあり、すべてのページを index.php で表示しなければならないわけではありません。
例えば個別投稿ページは single.php 、固定ページは page.php 、カテゴリアーカイブページは category.php 、などを用意すれば、 index.php よりも優先して使用されます。その上で、 header.php や footer.php のようなパーツは、上記のすべてのPHPファイルからインクルードできます。
つまり index.php や single.php など複数のテンプレートファイルの共通部分を header.php などに分離するというのが一般的な使い方です。ところで
get_template_part()
は関数ですので、ここにファイル名を入れるとインクルードできるというのはPHPやWordPressの仕様というより、そういう関数だということです。
ですので、拡張子はいらないというより「書いてはいけない」のであって、またカレントディレクトリを表す./
もいりません。
詳しくは関数のソースをご覧ください。
https://developer.wordpress.org/reference/functions/get_template_part/フォーラム: 使い方全般
返信が含まれるトピック: wp_get_attachment_image のエスケープ処理wp_get_attachment_image()
は添付画像を<img>
タグで出力する関数です。
これはそのままHTMLとして出力されるべき文字列なので、ページ上にソースとして表示するのでなければ、エスケープなどは必要ありません。フォーラム: 使い方全般
返信が含まれるトピック: ワードプレスはの下に何も記載してはいけないのでしょうか?get_template_part()
という関数を使えば任意のPHPファイルを読み込むことができます。
例えば drawermenu.php というファイルを読み込む場合はget_template_part('drawermenu');
というふうにすれば読み込めます。
サブディレクトリのファイルもget_template_part('example/drawermenu');
のように書くと読み込めます。index.php や footer.php のあるディレクトリは仕様で決まっていて(テーマディレクトリ)、カレントディレクトリといった概念とは異なると考えたほうがいいと思います。
footer.php を読み込むのはWordPressではよくあることなので、get_footer()
という関数が用意されているのだと思っています。なお footer.php には普通
wp_footer()
なんかを記述しますが、実際にはこの関数さえどこかに書いておけば index.php のみでもページを表示させることはできます。
wp_footer()
は</body>
の直前に書くのが普通ですが、必要ならその後に任意のPHPやHTMLを追加することも基本的には可能なはずです。- この返信は6年、 10ヶ月前にLABEが編集しました。
フォーラム: 使い方全般
返信が含まれるトピック: 記事のない子カテも一覧に表示したい03には記事がないのですから、表示されるはずもありません。
「カテゴリを表示したい」という意味なら、そもそもそのコードは「01」や「02」を含め、カテゴリを表示するようにはなっていません。また
query_posts()
は非推奨の関数なので使わないようにしましょう。
その用途ならpre_get_posts
が使えます。
functions.php に、例えば以下のような感じで。function my_pre_get_posts( $query ) { if ( is_admin() || ! $query->is_main_query() ) return; if ( $query->is_category('cat-oya') ) { $query->set('posts_per_page', 20); $query->set('order', 'ASC'); } } add_action( 'pre_get_posts', 'my_pre_get_posts' );
この場合 category-cat-oya.php 側のループ外の部分は必要ありません。
フォーラム: 使い方全般
返信が含まれるトピック: カスタム投稿の公開状態を自動で変更したいwp_cron
を設定するには- アクションをスケジュールに登録する。
- 処理を関数として用意する。
- アクションに関数をフックする。
の3つのステップが必要です。
@dwc-1 さんの(一番下の)コードでいうと1〜3行目が(1.)に、4〜7行目が(2.)に、8行目が(3.)にそれぞれ該当します。
(1.)は「投稿or編集されたとき」に必ず呼び出されるようにします。
publish_post
とかsave_post
とかのアクションにフックですかね。
@colorfullifeinfo さんが大方書いてくださったので、それに補足するなら例えば……add_action( 'save_post', 'set_cron_schedule', 10, 3 ); function set_cron_schedule( $post_ID, $post, $update ) { $args = array( $post->ID ); // 渡す引数 if ( ! wp_next_scheduled( 'blog_cron_event', $args ) && $post->post_type === 'hogehoge' && $post->post_status === 'private' ) wp_schedule_single_event( time() + 1800, 'blog_cron_event', $args ); }
(2.)(3.)はそのまま functions.php に記述します。
(2.)は @colorfullifeinfo さんのコードの後半です。フォーラム: 使い方全般
返信が含まれるトピック: カスタム投稿の公開状態を自動で変更したい<body>
内のヘッダーエリア、とは header.php のことでしょうか。
そこにそのコードを書くと、確かにすべてのアクセスに際して実行されるようになります。コードに問題はないと思いますが、すべてのアクセスに対してクエリを実行することになるため、処理的に無駄が多いのは否めません。
wp_cron
という仕組みを使えば、「編集の30分後に投稿ステータスを公開に変更する」というような処理を予約実行できるので、効率的ではありますが、結構ややこしいので万人向けではありません。
参考までにご紹介しておきます。大した問題ではないのですが、コードで少し気になった点を。
日時の比較でY/m/d H:i:s
の形式の文字列で比較されていますが、こういう文字列の比較ってちゃんとなりましたっけ。
いずれにせよタイムスタンプ(strtotime()
)で比較したほうが動作も確実で速い気がします。
後半のif文の部分はこんな感じではいかがでしょうか。if ( $private_blog ) { foreach ( $private_blog as $post ) { setup_postdata($post); date_default_timezone_set('Asia/Tokyo'); $post_time = strtotime($post->post_date); $edit_time = strtotime($post->post_modified); $key_time = strtotime('-30 min'); if ( empty($edit_time) ) $edit_time = $post_time; if ( $edit_time <= $key_time ) { // データベースにある投稿を公開に変更する // 省略 } } wp_reset_postdata(); }
フォーラム: 使い方全般
返信が含まれるトピック: カスタム投稿の公開状態を自動で変更したいpre_get_posts
アクションはクエリ実行の直前(単一またはアーカイブの投稿の取得直前)に実行されますが、このタイミングで特に何かが起こるわけではありませんし、このタイミングを使う意図がわかりかねます。
フックするアクションによって引数が異なり、利用可能なデータも変わってきますので、その辺り(条件)を指定していただければ助言しやすくなります。投稿のステータスを変更する部分はそれで合っていると思いますが、やはりその上の条件のほうだと思います。
フォーラム: 使い方全般
返信が含まれるトピック: カスタム投稿のサブページ(子ページ)一覧を表示したい