142 lines
4.1 KiB
PHP
142 lines
4.1 KiB
PHP
<?php
|
|
/**
|
|
* 便民服务的 meta key 定义与前台读取助手(双语内容、跳转链接、仅校内判定)。
|
|
* 函数名保持与主题历史一致,主题模板与后台按原名调用它们。
|
|
* 抽离自主题 functions.php。
|
|
*/
|
|
|
|
if (!defined('ABSPATH')) {
|
|
exit;
|
|
}
|
|
|
|
function itstudio_get_service_url_meta_key() {
|
|
return '_itstudio_service_url';
|
|
}
|
|
|
|
function itstudio_get_service_title_cn_meta_key() {
|
|
return '_itstudio_service_title_cn';
|
|
}
|
|
|
|
function itstudio_get_service_title_en_meta_key() {
|
|
return '_itstudio_service_title_en';
|
|
}
|
|
|
|
function itstudio_get_service_excerpt_cn_meta_key() {
|
|
return '_itstudio_service_excerpt_cn';
|
|
}
|
|
|
|
function itstudio_get_service_excerpt_en_meta_key() {
|
|
return '_itstudio_service_excerpt_en';
|
|
}
|
|
|
|
function itstudio_get_service_campus_only_meta_key() {
|
|
return '_itstudio_service_campus_only';
|
|
}
|
|
|
|
function itstudio_get_service_category_name_cn_meta_key() {
|
|
return 'itstudio_service_category_name_cn';
|
|
}
|
|
|
|
function itstudio_get_service_category_name_en_meta_key() {
|
|
return 'itstudio_service_category_name_en';
|
|
}
|
|
|
|
function itstudio_get_service_category_i18n_labels($term) {
|
|
if (!$term || is_wp_error($term)) {
|
|
return array(
|
|
'cn' => '未分类',
|
|
'en' => 'Uncategorized',
|
|
);
|
|
}
|
|
|
|
$term_id = (int) $term->term_id;
|
|
$name_cn = trim((string) get_term_meta($term_id, itstudio_get_service_category_name_cn_meta_key(), true));
|
|
$name_en = trim((string) get_term_meta($term_id, itstudio_get_service_category_name_en_meta_key(), true));
|
|
|
|
if ($name_cn === '') {
|
|
$name_cn = (string) $term->name;
|
|
}
|
|
if ($name_en === '') {
|
|
$name_en = $name_cn;
|
|
}
|
|
|
|
return array(
|
|
'cn' => $name_cn,
|
|
'en' => $name_en,
|
|
);
|
|
}
|
|
|
|
function itstudio_get_service_i18n_content($service_id, $excerpt_limit = 90) {
|
|
$service_id = (int) $service_id;
|
|
if ($service_id <= 0) {
|
|
return array(
|
|
'title_cn' => '',
|
|
'title_en' => '',
|
|
'excerpt_cn' => '',
|
|
'excerpt_en' => '',
|
|
);
|
|
}
|
|
|
|
$title_cn = trim((string) get_post_meta($service_id, itstudio_get_service_title_cn_meta_key(), true));
|
|
$title_en = trim((string) get_post_meta($service_id, itstudio_get_service_title_en_meta_key(), true));
|
|
$excerpt_cn = trim((string) get_post_meta($service_id, itstudio_get_service_excerpt_cn_meta_key(), true));
|
|
$excerpt_en = trim((string) get_post_meta($service_id, itstudio_get_service_excerpt_en_meta_key(), true));
|
|
|
|
$fallback_title = trim((string) get_the_title($service_id));
|
|
if ($fallback_title === '') {
|
|
$fallback_title = '未命名服务';
|
|
}
|
|
|
|
$fallback_excerpt = function_exists('itstudio_get_post_excerpt_chars')
|
|
? itstudio_get_post_excerpt_chars($service_id, $excerpt_limit)
|
|
: wp_html_excerpt(wp_strip_all_tags((string) get_post_field('post_excerpt', $service_id)), $excerpt_limit, '...');
|
|
$fallback_excerpt = trim((string) $fallback_excerpt);
|
|
if ($fallback_excerpt === '') {
|
|
$fallback_excerpt = '暂无简介';
|
|
}
|
|
|
|
if ($title_cn === '') {
|
|
$title_cn = $fallback_title;
|
|
}
|
|
if ($title_en === '') {
|
|
$title_en = $title_cn;
|
|
}
|
|
if ($excerpt_cn === '') {
|
|
$excerpt_cn = $fallback_excerpt;
|
|
}
|
|
if ($excerpt_en === '') {
|
|
$excerpt_en = $excerpt_cn;
|
|
}
|
|
|
|
return array(
|
|
'title_cn' => $title_cn,
|
|
'title_en' => $title_en,
|
|
'excerpt_cn' => $excerpt_cn,
|
|
'excerpt_en' => $excerpt_en,
|
|
);
|
|
}
|
|
|
|
function itstudio_get_service_target_url($service_id) {
|
|
$service_id = (int) $service_id;
|
|
if ($service_id <= 0) {
|
|
return '';
|
|
}
|
|
|
|
$meta_key = itstudio_get_service_url_meta_key();
|
|
$url = (string) get_post_meta($service_id, $meta_key, true);
|
|
if ($url !== '') {
|
|
return $url;
|
|
}
|
|
|
|
return (string) get_permalink($service_id);
|
|
}
|
|
|
|
function itstudio_is_service_campus_only($service_id) {
|
|
$service_id = (int) $service_id;
|
|
if ($service_id <= 0) {
|
|
return false;
|
|
}
|
|
|
|
return (string) get_post_meta($service_id, itstudio_get_service_campus_only_meta_key(), true) === '1';
|
|
}
|