WordPressのjQuery出力のコントロール(wp_footerで出す)

Filed under: functions.php,wordpress — kdcs @ 26年3月28日 土曜日

WordPressのデフォルトでは「wp_head」にjQueryが出力されるので基本的にはこの出力をfunctions.phpへの記述で停止して、footer.phpに直接読み込みを書いている。
しかし、状況によってはWordPressがjQueryの存在を認識できず、不具合が発生することがあるので、WordPressに認識させつつwp_footerで出力させる方法。

まず、現行のwp_headでjQueryの読み込みを停止する記述

// wp_head関連 wp_headでjQueryを読み込ませない--------------------------------------------
function my_delete_local_jquery() {
if (!is_admin()){
    wp_deregister_script('jquery');
  }
}
add_action( 'wp_enqueue_scripts', 'my_delete_local_jquery' );

wp_footerでjQueryを読み込ませる記述(テーマのjsフォルダ内にjquery.min.jsが必要)

// jQueryの出力(■注意!wp本体のjQueryを使わず直接読み込んでいる場合のみこの記述を使う)-
function register_custom_jquery() {

    // WordPress に「jquery」という名前で登録する
    wp_deregister_script('jquery'); // WP の jQuery を解除
    wp_register_script(
        'jquery',
        get_template_directory_uri() . '/js/jquery.min.js?v=3.7.1',
        array(),
        null,
        true
    );

    wp_enqueue_script('jquery'); // これでフッターに出力される
}
add_action('wp_enqueue_scripts', 'register_custom_jquery', 20);

WordPress6.9で「global-styles」を出力させない方法

Filed under: functions.php,wordpress — kdcs @ 25年12月14日 日曜日

WordPress 6.9 では「global-styles」の出力方法が変更され、従来の wp_dequeue_style(‘global-styles’) が効かなくなったため「remove_action」で対応する方法。

functions.php

// wp_headで出力される'global-styles'を停止する(wp6.9~)-------------------------
add_action( 'wp_loaded', function() {
    remove_action( 'wp_enqueue_scripts', 'wp_enqueue_global_styles' );
    remove_action( 'wp_footer', 'wp_enqueue_global_styles', 1 );
});

固定ページとカスタム投稿タイプのスラッグが同じだと問題あり

Filed under: functions.php,wordpress — kdcs @ 25年12月9日 火曜日

例で説明
固定ページに「bridal」というパーマリンクを付けた場合にカスタム投稿タイプも「bridal」で作ってしまうと競合してしまい、その結果https://~hogehoge/bridalでアクセスするとbridalのアーカイブテンプレートに飛ばされてしまい、固定ページが表示されない。

解決方法
「bridal」を固定ページで使う場合、「カスタム投稿タイプ bridal」のアーカイブページを別に指定してやると競合しない。

こちらを入れる
archiveを「bridal-list」などに書き換える

            'rewrite' => array('slug' => 'bridal-list'),
            'has_archive' => 'bridal-list',

こちらは通常のカスタム投稿タイプ作成

add_action('init', 'add_bridal_post_type');
function add_bridal_post_type() {
    $params = array(
            'labels' => array(
                    'name' => 'ブライダルプラン',
                    'singular_name' => 'ブライダルプラン',
                    'add_new' => '新規追加',
                    'add_new_item' => 'ブライダルプランを新規追加',
                    'edit_item' => 'ブライダルプランを編集する',
                    'new_item' => '新規ブライダルプラン',
                    'all_items' => 'ブライダルプラン一覧',
                    'view_item' => 'ブライダルプランを見る',
                    'search_items' => '検索する',
                    'not_found' => 'ブライダルプランが見つかりませんでした。',
                    'not_found_in_trash' => 'ゴミ箱内にブライダルプランが見つかりませんでした。'
            ),
            'public' => true,
            'has_archive' => true,
            'supports' => array(
                    'title',
                    'editor',
                    'author',
                    'custom-fields',
                    'thumbnail',
            ),
            'taxonomies' => array('bridal_category','bridal_tag')
    );
    register_post_type('bridal', $params);
}

こちらが対策後

add_action('init', 'add_bridal_post_type');
function add_bridal_post_type() {
    $params = array(
            'labels' => array(
                    'name' => 'ブライダルプラン',
                    'singular_name' => 'ブライダルプラン',
                    'add_new' => '新規追加',
                    'add_new_item' => 'ブライダルプランを新規追加',
                    'edit_item' => 'ブライダルプランを編集する',
                    'new_item' => '新規ブライダルプラン',
                    'all_items' => 'ブライダルプラン一覧',
                    'view_item' => 'ブライダルプランを見る',
                    'search_items' => '検索する',
                    'not_found' => 'ブライダルプランが見つかりませんでした。',
                    'not_found_in_trash' => 'ゴミ箱内にブライダルプランが見つかりませんでした。'
            ),
            'public' => true,
            'has_archive' => true,
            'supports' => array(
                    'title',
                    'editor',
                    'author',
                    'custom-fields',
                    'thumbnail',
            ),
            'taxonomies' => array('bridal_category','bridal_tag'),
            'rewrite' => array('slug' => 'bridal-list'),
            'has_archive' => 'bridal-list',
    );
    register_post_type('bridal', $params);
}

管理画面の投稿一覧に特定の投稿を先頭に表示させる方法

Filed under: functions.php,wordpress — kdcs @ 25年12月2日 火曜日

投稿タイプと先頭固定したい記事のIDを入力

function my_admin_post_order( $orderby, $query ) {
    if ( is_admin() && $query->is_main_query() && $query->get('post_type') === 'banquet_plan' ) {
        $sticky_id = 324;
        global $wpdb;
        // 特定の投稿IDを最上部に、それ以外は通常の並び
        $orderby = "FIELD({$wpdb->posts}.ID, $sticky_id) DESC, {$wpdb->posts}.post_date DESC";
    }
    return $orderby;
}
add_filter( 'posts_orderby', 'my_admin_post_order', 10, 2 );

WordPressテーマ内のファイルに別ファイル読み込み「include」ほか

Filed under: php,wordpress — kdcs @ 25年11月28日 金曜日

テーマ内のテンプレートファイルに別ファイルを読み込ませる場合、今までは「TEMPLATEPATH.」を使っていたが、WordPress 6.4.0 以降では 非推奨 になっているのでその代替の手法。

今までの記述

<?php include(TEMPLATEPATH.'/hogehoge.php'); ?>

その1.「include get_template_directory()」を使う

<?php include get_template_directory() . '/hogehoge.php'; ?>

その2.WordPress 標準のテンプレート読み込み関数「get_template_part() 」を使う

get_template_part('hogehoge');

hogehoge.phpが、hogehoge-news.phpのようにハイフン付きのファイル名の場合

get_template_part('hogehoge', 'news');

<?php 
/*
  list.php
  list-news.php
  を読み込む
*/
  get_template_part('list'); 
  get_template_part('list', 'news'); 

/*
  parts/list.php
  parts/list-news.php
  を読み込む
*/
  get_template_part('parts/list'); 
  get_template_part('parts/list', 'news'); 
?>

サイト内検索

カテゴリー

最近の投稿

↑上に戻る