# [メタ情報] # 識別子: 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 '

動画はまだ準備中です。

'; // ★ 2. ここで魔法のIDすり替えを実行! 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) { // ★ 3. すり替わった後の新しい $video_id を使ってJSON内を探す 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(); if (!$page_url) $page_url = home_url(add_query_arg([],'/')); $rel_dir = ''; if (isset($_GET['pubtxt_dir']) && is_string($_GET['pubtxt_dir'])) { $rel_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)) { $rel_dir=''; $current_dir=$base_dir; } $validSort = ['name','mtime','size']; $sort = (isset($_GET['sort']) && in_array($_GET['sort'], $validSort, true)) ? $_GET['sort'] : ''; $order = (isset($_GET['order']) && in_array(strtolower($_GET['order']), ['asc','desc'], true)) ? strtolower($_GET['order']) : ''; if ($sort === '') { $sort = 'mtime'; $order = 'desc'; } $nextOrder = function($key) use ($sort,$order){ if ($key !== $sort) { return ($key === 'mtime') ? 'desc' : 'asc'; } return ($order === 'asc') ? 'desc' : 'asc'; }; $url_with = function(array $add) use ($page_url, $rel_dir, $sort, $order){ $args = ['pubtxt_dir' => $rel_dir]; if ($sort) $args['sort'] = $sort; if ($order) $args['order'] = $order; foreach ($add as $k=>$v){ if ($v === null) unset($args[$k]); else $args[$k] = $v; } return add_query_arg($args, $page_url); }; $fmt = function($f,$ts){ if(function_exists('wp_date')) { $s=wp_date($f,$ts); if($s) return $s; } if(function_exists('date_i18n')) { $s=date_i18n($f,$ts,false); if($s) return $s; } return gmdate($f,$ts); }; $items = []; foreach (scandir($current_dir) as $name) { if ($name === '.' || $name === '..') continue; if ($name[0] === '.' || in_array($name, $exclude_dirs, true)) continue; if (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'=>$url_with(['pubtxt_dir'=>$rel,'sort'=>null,'order'=>null]), ]; } elseif (is_file($full)) { $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION)); if (!in_array($ext, $allowed_exts, true)) continue; $size = @filesize($full) ?: 0; $items[] = [ 'type'=>'file','name'=>$name,'rel'=>$rel,'mtime'=>$mtime,'size'=>$size, '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){ $vx = $a[$sort] ?? null; $vy = $b[$sort] ?? null; $cmp = ($sort==='name') ? strcasecmp((string)$vx,(string)$vy) : (($vx <=> $vy)); return ($order==='asc') ? $cmp : -$cmp; }); $crumbs=[['label'=>'root','rel'=>'']]; if ($rel_dir) { $acc=[]; foreach (explode('/',$rel_dir) as $seg){ $acc[]=$seg; $crumbs[]=['label'=>$seg,'rel'=>implode('/',$acc)]; } } $crumb_html=[]; foreach($crumbs as $i=>$c){ if ($i === count($crumbs)-1) $crumb_html[] = ''.esc_html($c['label']).''; else $crumb_html[] = ''.esc_html($c['label']).''; } $latest = max(array_column($items,'mtime')); $th_link = function($key,$label) use ($page_url,$rel_dir,$nextOrder){ $url = add_query_arg(['pubtxt_dir'=>$rel_dir,'sort'=>$key,'order'=>$nextOrder($key)], $page_url); return ''.$label.''; }; ob_start(); ?>
©
'; } foreach ($items as $it): $date = esc_html($fmt('Y-m-d H:i:s', $it['mtime'])); $size = $it['size'] ? size_format($it['size'],2) : ''; if ($it['type']==='dir') { echo ''; } else { echo ''; } endforeach; ?>
DL
..戻る
📁 '.esc_html($it['name']).''.$date.'開く
'.esc_html($it['name']).''.$date.''.esc_html($size).'DL
add_node(['id' => 'XXXXXX-toggle-pv', 'title' => $label, 'href' => $url]); }, 100); ```