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);

管理画面のカテゴリー一覧から特定のカテゴリーを除外

Filed under: functions.php — kdcs @ 25年12月22日 月曜日

ダミーのカテゴリーを作成した場合、そのカテゴリーをチェックリストから非表示する方法。

functions.php

function hide_specific_category_in_editor( $args, $taxonomy ) {
    if ( 'category' === $taxonomy ) {
        // 非表示にしたいカテゴリーIDを指定
        $args['exclude'] = array( 123 );
    }
    return $args;
}
add_filter( 'wp_terms_checklist_args', 'hide_specific_category_in_editor', 10, 2 );

この方法のメリット
・完全にチェックリストから消える
・CSS のように「見えないけど存在する」状態ではなく、UI から除外される

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 );

サイト内検索

カテゴリー

最近の投稿

↑上に戻る