chatm
フォーラムへの返信
-
フォーラム: 使い方全般
返信が含まれるトピック: 特定カテゴリーの月別アーカイブ解決したと思ったのですが、他のカテゴリーのトップページの一覧まで絞り込んでしまって、他のカテゴリーのアーカイブ一覧が表示されなくなってしまいました。
なので、AIと検討しながら作った下記のコードが完成形になります。
(文字化け防止コードの指定もあり)
●はカテゴリーIDの番号、blogはこの場合のカテゴリースラッグです。
ドロップダウンで月別アーカイブの投稿数()も取得する‘limit’ => 24, // 2年間分の月別アーカイブを取得
‘limit’ => ”, // 空にすると、全期間のアーカイブが表示される
sidebar.php<div class="archive">
<h3>月別アーカイブ</h3>
<select name="archive-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
<option disabled selected value>選択してください</option>
<?php
$archives = wp_get_archives(array(
'type' => 'monthly',
'limit' => 12,
'echo' => false,
'format' => 'custom'
));
$dom = new DOMDocument();
@$dom->loadHTML(mb_convert_encoding($archives, 'HTML-ENTITIES', 'UTF-8')); // UTF-8に変換して解析
foreach ($dom->getElementsByTagName('a') as $link) {
$url = $link->getAttribute('href');
$filtered_url = add_query_arg('cat', ●, $url);
// 年・月を取得
preg_match('/(\d{4})\/(\d{2})/', $url, $matches);
if (!empty($matches)) {
$year = intval($matches[1]);
$month = intval($matches[2]);
// blogカテゴリーの投稿数を取得
$args = array(
'category__in' => array(●),
'year' => $year,
'monthnum' => $month,
'posts_per_page' => -1,
);
$posts = get_posts($args);
$post_count = count($posts);
} else {
$post_count = 0; // デフォルトで0を設定
}
echo '<option value="' . esc_url($filtered_url) . '">' . htmlspecialchars($link->nodeValue, ENT_QUOTES, 'UTF-8') . ' (' . $post_count . ')</option>';
}
?>
</select>
</div><!-- /archive -->↓投稿数なしの場合
<div class="archive">
<h3>月別アーカイブ</h3>
<select name="archive-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
<option disabled selected value>選択してください</option>
<?php
$archives = wp_get_archives(array(
'type' => 'monthly',
'limit' => 12,
'echo' => false,
'format' => 'custom'
));
$dom = new DOMDocument();
@$dom->loadHTML(mb_convert_encoding($archives, 'HTML-ENTITIES', 'UTF-8')); // UTF-8に変換して解析
foreach ($dom->getElementsByTagName('a') as $link) {
$url = $link->getAttribute('href');
$filtered_url = add_query_arg('cat', ●, $url);
echo '<option value="' . esc_url($filtered_url) . '">' . htmlspecialchars($link->nodeValue, ENT_QUOTES, 'UTF-8') . '</option>';
}
?>
</select>
</div><!-- /archive -->function.php の記述 他のカテゴリーのアーカイブに影響をあたえない設定
//特定カテゴリー月別アーカイブ(blogカテゴリーのスラッグblogのみ表示)
function filter_blog_archives($query) {
if ($query->is_main_query() && !is_admin() && is_archive()) {
// 特定のカテゴリースラッグ(blog)の場合のみ絞り込み
if (is_category('blog')) {
$query->set('category__in', array(●));
}
}
}
add_action('pre_get_posts', 'filter_blog_archives');フォーラム: 使い方全般
返信が含まれるトピック: 特定カテゴリーの月別アーカイブすみません、自己解決しました。カテゴリーを絞れるコードをsidebar.phpとfunction.phpの両方に設定して、月別アーカイブに特定のカテゴリーだけ表示させることができました。
サイドバーはドロップダウンの表示、投稿件数()表示「’show_post_count’ => 1,」付きの設定です。
●はカテゴリーIDの番号(数字)blogはこの場合のカテゴリースラッグです。
sidebar.php<div class="archive">
<h3>月別アーカイブ</h3>
<select name="archive-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
<option disabled selected value>選択してください</option>
<?php wp_get_archives(array(
'type' => 'monthly',
'format' => 'option',
'show_post_count' => 1,
'category' => ● // blogカテゴリーのみ
)); ?>
</select>
</div><!-- /archive -->function.php に下記を記述しました。
●はカテゴリーIDの番号、blogはこの場合のカテゴリースラッグです。
お使いの場合は皆様が設定されたカテゴリー名を入れて下さい。もっと素敵なコードがあるのでしょうが、私の場合は、カテゴリースラッグとカテゴリーID番号の2つをfunction.phpに記載しないと、カテゴリーで絞りこみできませんでした。//特定カテゴリー月別アーカイブ(blogカテゴリーのスラッグblogのみ表示)
function custom_get_archives_where($where, $args) {
global $wpdb;
$where .= $wpdb->prepare(" AND ID IN (SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id = (SELECT term_id FROM {$wpdb->terms} WHERE slug = %s))", 'blog');
return $where;
}
add_filter('getarchives_where', 'custom_get_archives_where', 10, 2);
//特定カテゴリー月別アーカイブ(blogカテゴリーID=●のみ表示)
function filter_blog_archives($query) {
if ($query->is_main_query() && !is_admin() && is_archive()) {
$query->set('category__in', array(●)); // blogカテゴリーのみ表示
}
}
add_action('pre_get_posts', 'filter_blog_archives');フォーラム: 使い方全般
返信が含まれるトピック: 月別アーカイブページのページネーションフォーラム: 使い方全般
返信が含まれるトピック: 月別アーカイブページのページネーションご返答ありがとうございます。
・オリジナルテーマを自作し、wp6.2.2グーテンベルグで稼働させています。
・カテゴリー●●ページの一覧アーカイブページを作ってcategory-●●.phpというテンプレートにして、上記のコードを書いています。
・カテゴリーや子カテゴリーの一覧ならページ送りができるのですが、月別アーカイブだけがページ送りできません。
たぶん、ダッシュボードの表示件数は12件ですが、このカテゴリー●●だけfunction.phpで4件だけ表示させる設定をしています。
これが怪しいのかもしれません。下記の●●はカテゴリースラッグ名です。
4は表示件数です。これを外せば表示件数12件超えればページ送りできそうな気もしますが。//ページの表示件数を、特定のカテゴリーアーカイブや投稿タイプによって変更する function my_paginate(){ global $wp_query, $paged; $p_base = get_pagenum_link(1); $p_format = 'page/%#%'; if($word = strpos($p_base, '?')){ $p_base = get_option(home).(substr(get_option(home), -1 ,1) === '/' ? '' : '/') .'%_%'.substr($p_base, $word); } else{ $p_base .= (substr($p_base, -1 ,1) === '/' ? '' : '/') .'%_%'; } echo paginate_links(array( 'base' => $p_base, 'format' => $p_format, 'total' => $wp_query->max_num_pages, 'current' => ($paged ? $paged : 1), 'end_size' => 1, 'mid_size' => 2, )); } function change_posts_per_page($query) { if( is_admin() || ! $query->is_main_query() ){ return; } // 「●●」のカテゴリーページで表示件数を4件にする */ if ( $query->is_category( array('●●') )) { $query->set( 'posts_per_page', '4' ); return; } } add_action( 'pre_get_posts', 'change_posts_per_page' );
- この返信は2年前にchatmが編集しました。
フォーラム: 使い方全般
返信が含まれるトピック: 月別アーカイブページのページネーションご返答ありがとうございます。そのコードを追加してみても変化ありません。カテゴリー名ならページ送りできるのですが。
date.php など作って月別一覧のページ送りを別に設定すればうまくいくのでしょうか。フォーラム: 使い方全般
返信が含まれるトピック: 複数カテゴリーの一覧のページネーションありがとうございます!
確かに、
'paged' => $paged,
を入れたらページ送りできました。
どちらのコードでも良いのでしょうかね。念のため最初のコードの修正版を下記に記載します
<div class="news-list"> <dl> <?php $wp_query = new WP_Query(); $my_posts = array( 'post_type' => 'post', 'category_name' => 'news,estate', //スラッグ 'posts_per_page'=> '5', 'paged' => $paged, ); $wp_query->query( $my_posts ); if( $wp_query->have_posts() ): while( $wp_query->have_posts() ) : $wp_query->the_post(); ?> <dt><?php the_date('Y/m/d'); ?></dt> <dd> <a href="<?php the_permalink(); ?>"><h2><?php the_title(); ?></h2></a> <?php add_filter( 'excerpt_length', function ( $length ) { return 50; }, 999 ); the_excerpt(); ?> </dd> <?php endwhile; endif;//ループ終わり ?> </dl> </div><!-- /news-list --> <!-- pegenation --> <div class="pagination pagination-index"> <?php $big = 9999999999; $arg = array( 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), 'current' => max( 1, get_query_var('paged') ), 'total' => $wp_query->max_num_pages, 'type' => 'list' ); echo paginate_links( $arg ); ?> </div>
フォーラム: 使い方全般
返信が含まれるトピック: 複数カテゴリーの一覧のページネーション以前は固定ページを作って複数カテゴリーの中から新着をリストにしていたのですが、その方法でも今回はページネーションがうまくいかなかったので、他にもいろいろな原因があるのだと思われます。表示設定やphpの名前を変更や、固定ページのテンプレートにしてもうまくいかなかったので。
なので、このページを「news」カテゴリーの新着情報として扱うことにしました。
複数のカテゴリーが入るリストですが、他のカテゴリーであっても、投稿記事のカテゴリー選択で、
「他のカテゴリー」+「news」を必ず選択させるということで、newsの一覧リストとして表示させました。
投稿記事を入力する時にカテゴリーを複数選択するので、スマートではなくなりますが、ページネーションはできるようになりました。複数のカテゴリーを選択するとURLの優先がありますが、Yoast SEOプラグインを入れて、投稿画面でカテゴリーのメインを選択し、記事のアドレスをカテゴリーのメインになるようにしました。
念のため設定したコードを記載します(前のコードではうまくページ送りできなかったので)
<div class="news-list"> <dl> <?php $paged = (int) get_query_var('paged'); $post_loop = new WP_Query( array( 'post_type' => 'post', 'category_name' => 'news,estate', //カテゴリースラッグ 'posts_per_page' => 5, 'paged' => $paged, ) );if ($post_loop->have_posts()): ?> <?php while ( $post_loop->have_posts() ) : $post_loop->the_post();?> <?php get_template_part('module_loop_post'); ?> <dt><?php the_date('Y/m/d'); ?></dt> <dd> <a href="<?php the_permalink(); ?>"><h2><?php the_title(); ?></h2></a> <?php add_filter( 'excerpt_length', function ( $length ) { return 50; }, 999 ); the_excerpt(); ?> </dd> <?php endwhile; endif; ?> </dl> </div><!-- /news-list --> <!-- pegenation --> <div class="pagination pagination-index"> <?php $big = 9999999999; $arg = array( 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), 'current' => max( 1, get_query_var('paged') ), 'total' => $post_loop->max_num_pages, 'type' => 'list' ); echo paginate_links( $arg ); ?> </div>
- この返信は3年、 5ヶ月前にchatmが編集しました。
フォーラム: プラグイン
返信が含まれるトピック: 画像ポップアップ系のプラグインが機能しないお答え頂きましてありがとうござます。
仰る通り、header.php に<?php wp_head(); ?>
を入れ忘れておりました。
まさかこんな単純なミスで動かなくなるとは・・・
それだけでグーテンベルグのcssや、デフォルトのいろいろなものが挿入されなくなるのですね。
バタバタしてたので単純なミスに気が付かなくて残念な時間を費やしてしまいました。
お騒がせいたしました。教えて頂きましてありがとうございました!フォーラム: プラグイン
返信が含まれるトピック: 画像ポップアップ系のプラグインが機能しないすみません、Easy FancyBoxなどのポップアップが機能しないと書いたのですが、テーマを「Twenty Nineteen」に変えたら機能しましたので、wordpressのデフォルトで自動挿入される、Gutenberg用CSSやwp-json、他を読み込んでいないようです。function.phpにも特別に以前と変えたものは無いのですが、wordpressのデフォルトの設定が読み込まれなくなるという件で、何か原因が分かれば教えて頂けると助かります。
フォーラム: 使い方全般
返信が含まれるトピック: シングルページをカレント表示したいできました!
すみません!子カテゴリーをカレント表示させたかったので、
if ( $cat->parent ) {
にしたら思い通りの表示になりました。
度々教えて頂きましてありがとうございました!フォーラム: 使い方全般
返信が含まれるトピック: シングルページをカレント表示したいありがとうございます!できましたが、
申し訳ございません、シングルページが子カテゴリーに属するページでして、
現在は、シングルページで一番上の親がカレント表示されてしまいます。
その下の子カテゴリー(複数ある)をカレント表示させることはできますでしょうか。
何度も度々すみませんです・・・フォーラム: 使い方全般
返信が含まれるトピック: シングルページをカレント表示したいいつもありがとうございます。function.phpに入れてみましたが変わらずです。
(ifの行のemptyはエラーが出てたので削除してしまいましたが)
そもそも新しくなったwpのウィジェットがなんだかポンコツな感じもしますし、もう、アクティブ表示はなしにしようかしら、と思い始めています。
いつも丁寧なご対応をありがとうございます。フォーラム: 使い方全般
返信が含まれるトピック: ウィジェットに特定のカテゴリーだけ表示したいお答えいただきありがとうございます。
今回のコードを削除しても表示されてましたので、関係なかったですね。すみません!気になるので、教えていただいたリンク先にあった、GitHubのハックをfunction.phpに入れて通知を消してしまいました。(下記です)
remove_filter( 'admin_head', 'wp_check_widget_editor_deps' );
エラーメッセージは通知されなくなりましたが、
カテゴリー同士の優先度の設定にYoast SEOなども使っていますので、
バージョンアップで修正を待ちたいと思います。フォーラム: 使い方全般
返信が含まれるトピック: ウィジェットに特定のカテゴリーだけ表示したいすみません、デバックモードで作業していますが、ウィジェット画面の上部に下記のエラーが出ていました。表面上のサイトの動作には問題ないので、無視してもいいものか、少し気になりますが大丈夫でしょうか。
「`Notice: wp_enqueue_script() が誤って呼び出されました。
“wp-editor” script should not be enqueued together with the new widgets editor
(wp-edit-widgets or wp-customize-widgets).
詳しくは WordPress のデバッグをご覧ください。
(このメッセージはバージョン 5.8.0 で追加されました)
in /home/ドメイン/wp-includes/functions.php on line 5663`」フォーラム: 使い方全般
返信が含まれるトピック: ウィジェットに特定のカテゴリーだけ表示したい