1- Объяснение (для школьных предметов)
2- Термин (первый и второй)
3- Класс (первый класс, второй .....до шестого класса)
4- Учебная программа по стране (британский , Катар, ОАЭ)
затем установила следующие связи между типами сообщений:
1- Учебная программа -> Объяснение
2- Класс -> Объяснение
3- Термин -> Объяснение
поэтому, когда я создаю сообщение типа «Объяснение», одно и то же объяснение можно найти много раз в зависимости от семестра, класса и учебной программы. например, сообщения «Объяснения» могут быть такими:
1- Математика (Семестр-> первый, Класс-> далее, Учебная программа страны-> ОАЭ)
2- Математика (Семестр-> первый, Класс-> Шестой, Учебная программа страны-> Британский)
3- Физика (Семестр-> Второй, Класс-> Шестой, Страна) Учебный план-> Катар)
и т. д.
но постоянная ссылка на пост такая:
https:/ /mywebsite.com/explanation/post_name
и мне нужно, чтобы это было так (например):
https://mywebsite.com /UAE/fisrt_class/ Second/explanation/math
поэтому я создал этот код, чтобы создать пользовательскую постоянную ссылку для сообщения типа сообщения «Объяснение»
в соответствии с его отношениями, и я могу не устанавливаю эти отношения внутри пользовательской постоянной ссылки (Настройки -> Постоянная ссылка), поскольку они не сохраняются как метаданные сообщений (сохраняются только в таблице в базе данных):
Код: Выделить всё
function get_post_type_relation($relation)
{
$relations_manager = jet_engine()->relations;
$post_types = $relations_manager->data->db->query_cache['post_types'];
$relation_post_types = array_filter($post_types, function ($post_type) {
return $post_type['status'] === 'relation';
});
$relation_post_types_info = array_map(function ($post_type) {
return [
'id' => $post_type['id'],
'name' => unserialize($post_type['labels'])['name']
];
}, $relation_post_types);
$formatted_relations_array = array_reduce($relation_post_types_info, function ($carry, $item) {
$parts = explode(' to ', $item['name']);
if (count($parts) === 2) {
$child = $parts[1];
$parent = $parts[0];
$carry[$child]['Relations']['as_child'][] = [
'id' => $item['id'],
'parent' => $parent,
'db_relation_table' => 'jet_rel_' . $item['id']
];
}
return $carry;
}, []);
return $formatted_relations_array[$relation] ?? [];
}
function get_relation_parent_postid($relation, $child_post_id, $parent_item)
{
$relation = 'Explanation';
$post_type_relsult = get_post_type_relation($relation);
$post_type_relations = $post_type_relsult['Relations']['as_child'];
$relation_db = '';
foreach ($post_type_relations as $relation) {
if ($relation['parent'] == $parent_item) {
$relation_db = $relation['db_relation_table'];
break;
}
}
if ($relation_db != '') {
global $wpdb;
$relation_db = $wpdb->prefix . $relation_db;
$table_exists = $wpdb->get_var($wpdb->prepare("SHOW TABLES LIKE %s", $relation_db));
if ($table_exists) {
$query = $wpdb->prepare("SELECT parent_object_id FROM $relation_db WHERE child_object_id = %d", $child_post_id);
} else {
$relation_db = $wpdb->prefix . 'jet_rel_default';
$query = $wpdb->prepare("SELECT parent_object_id FROM $relation_db WHERE child_object_id = %d", $child_post_id);
}
$parent_object_id = $wpdb->get_var($query);
return $parent_object_id;
}
}
function custom_explanation_permalink($post_link, $post)
{
$relation = 'explanation';
if ($post->post_type == $relation) {
$explanation_result = get_post_type_relation($relation);
// Replace these with the actual IDs
$curriculum_id = get_relation_parent_postid($explanation_result, $post->ID, 'Curriculum'); // Replace with your curriculum ID
$class_id = get_relation_parent_postid($explanation_result, $post->ID, 'Class');; // Replace with your class ID
$term_id = get_relation_parent_postid($explanation_result, $post->ID, 'Term');; // Replace with your term ID
if (!empty($curriculum_id) && !empty($class_id) && !empty($term_id)) {
// Get the post slugs using the IDs
$curriculum_slug = get_post_field('post_name', $curriculum_id);
$class_slug = get_post_field('post_name', $class_id);
$term_slug = get_post_field('post_name', $term_id);
$new_slug = $curriculum_slug . '/' . $class_slug . '/' . $term_slug . '/explanation';
// Replace the placeholders in the permalink with the actual slugs
$post_link = str_replace('explanation', $new_slug, $post_link);
}
}
return urldecode($post_link);;
}
add_filter('post_type_link', 'custom_explanation_permalink', 10, 2);
Страница не найдена
Похоже как будто по этому адресу ничего не найдено.
как исправить, пожалуйста
Подробнее здесь: https://stackoverflow.com/questions/789 ... -permalink
Мобильная версия