# [メタ情報] # 識別子: functionsphp全文_exe # 補足: # [/メタ情報] 要約: このWordPress `functions.php`ファイルは、主にCocoonテーマ向けの機能強化と汎用的なコンテンツ表示ショートコードを提供します。 1. **モバイルフッターボタン非表示:** 固定ページにおいて、モバイル表示(幅900px以下)時にCocoonテーマのフッターボタン(複数セレクタを網羅)をCSSとJavaScriptの両方で強制的に非表示にし、表示領域を確保します。 2. **`[dynamic_external_html url="..."]`:** 指定されたURLから外部のテキストコンテンツを安全に取得し、ページ内に埋め込むショートコード機能です。 3. **`[videoembed videoid="..."]`:** `videoid`をキーとして、外部JSONファイルから対応する動画埋め込みコードを動的に取得・表示するショートコードです。 4. **`[pub_txt_list]`とTXTファイル配信:** WordPressの`wp-content/pmedia/scripts_pub`ディレクトリ内の`.txt`ファイルとサブディレクトリを階層的に一覧表示し、名前・更新日時・サイズでソートできるショートコードを提供します。また、`?pubtxt=`パラメータを用いて、指定された`.txt`ファイルをセキュリティを考慮しつつUTF-8でブラウザ表示またはダウンロード配信する機能も実装されています。 5. **Cocoon PV表示トグル:** 管理者向けに、管理バーからCocoonテーマの投稿PV表示機能をON/OFFできるトグルボタンを追加し、OFF設定時はCSSでPV表示要素を隠します。 themes/cocoon-child-master/functions.php ``` ''), $atts); $url = $attributes['url']; if (empty($url)) return '◆◆◆'; $response = wp_remote_get($url); if (is_wp_error($response)) return 'テキストの読み込みに失敗しました。'; return wp_remote_retrieve_body($response); } function display_dynamic_external_html($atts) { return fetch_dynamic_external_html_content($atts); } add_shortcode('dynamic_external_html', 'display_dynamic_external_html'); /* ========================================================= * 2) 動画埋め込み: [videoembed videoid="..."] * =======================================================*/ function videoembed_shortcode($atts) { $atts = shortcode_atts(array('videoid' => ''), $atts, 'videoembed'); $video_id = $atts['videoid']; if (empty($video_id)) return '
動画はまだ準備中です。
'; if (function_exists('get_alt_video_id')) { $video_id = get_alt_video_id($video_id); } $json_url = 'https://XXXXXX.com/gd_proxy/?f=videoembed.json'; $response = wp_remote_get($json_url); if (is_wp_error($response)) return '動画はまだ準備中です。
'; $data = json_decode(wp_remote_retrieve_body($response), true); if (!is_array($data)) return '動画はまだ準備中です。
'; foreach ($data as $entry) { if (isset($entry['videoid']) && (string)$entry['videoid'] === (string)$video_id) { return do_shortcode($entry['embedCode']); } } return '動画はまだ準備中です。
'; } add_shortcode('videoembed', 'videoembed_shortcode'); /* ========================================================= * 公開用TXTリスト: [pub_txt_list] * =======================================================*/ add_shortcode('pub_txt_list', function($atts){ $base_dir = WP_CONTENT_DIR . '/pmedia/scripts_pub'; $allowed_exts = ['txt']; $exclude_files = ['key_patterns.txt']; $exclude_dirs = ['@eaDir']; $uid = 'pub-txt-' . (function_exists('wp_generate_uuid4') ? wp_generate_uuid4() : uniqid()); if (!is_dir($base_dir)) return '一覧ディレクトリが存在しません。
'; $page_url = get_permalink() ?: home_url(add_query_arg([],'/')); $rel_dir = (isset($_GET['pubtxt_dir']) && is_string($_GET['pubtxt_dir'])) ? trim(str_replace('\\','/', $_GET['pubtxt_dir']), '/') : ''; if ($rel_dir === '.' || strpos($rel_dir, '..') !== false || strpos($rel_dir, "\0") !== false) $rel_dir = ''; $current_dir = $base_dir . ($rel_dir ? '/'.$rel_dir : ''); if (!is_dir($current_dir)) $current_dir = $base_dir; $validSort = ['name','mtime','size']; $sort = (isset($_GET['sort']) && in_array($_GET['sort'], $validSort, true)) ? $_GET['sort'] : 'mtime'; $order = (isset($_GET['order']) && in_array(strtolower($_GET['order']), ['asc','desc'], true)) ? strtolower($_GET['order']) : 'desc'; $nextOrder = function($key) use ($sort,$order){ if ($key !== $sort) return ($key === 'mtime') ? 'desc' : 'asc'; return ($order === 'asc') ? 'desc' : 'asc'; }; $fmt = function($f,$ts){ if(function_exists('wp_date')) { $s=wp_date($f,$ts); if($s) return $s; } return date_i18n($f,$ts); }; $items = []; foreach (scandir($current_dir) as $name) { if ($name === '.' || $name === '..' || $name === '.' || in_array($name, $exclude_dirs, true) || in_array($name, $exclude_files, true)) continue; $full = $current_dir . '/' . $name; if (!is_readable($full)) continue; $rel = ltrim(($rel_dir ? $rel_dir.'/' : '').$name, '/'); $mtime = @filemtime($full) ?: 0; if (is_dir($full)) { $items[] = ['type'=>'dir','name'=>$name,'rel'=>$rel,'mtime'=>$mtime,'size'=>0, 'href'=>add_query_arg(['pubtxt_dir'=>$rel], $page_url)]; } elseif (is_file($full)) { $items[] = ['type'=>'file','name'=>$name,'rel'=>$rel,'mtime'=>$mtime,'size'=>(@filesize($full) ?: 0), 'view'=>add_query_arg(['pubtxt'=>$rel], $page_url), 'dl'=>add_query_arg(['pubtxt'=>$rel,'dl'=>'1'], $page_url)]; } } if (!$items) return '対象ファイルがありません。
'; usort($items, function($a,$b) use($sort,$order){ $cmp = ($sort==='name') ? strcasecmp((string)$a[$sort],(string)$b[$sort]) : ($a[$sort] <=> $b[$sort]); return ($order==='asc') ? $cmp : -$cmp; }); $latest = max(array_column($items,'mtime')); ob_start(); ?>| $rel_dir,'sort'=>'name','order'=>$nextOrder('name')], $page_url)).'">名前'; ?> | $rel_dir,'sort'=>'mtime','order'=>$nextOrder('mtime')], $page_url)).'">更新日時'; ?> | サイズ | DL |
|---|---|---|---|
| .. | 戻る | ||