RP_Rave1_theme/template-parts/contributor.php

170 lines
5.6 KiB
PHP
Raw Permalink Normal View History

2024-11-06 10:10:48 +00:00
<?php
// INFO: Közreműködők
if (!defined('ABSPATH')) {
exit; // Kilépés, ha közvetlenül érjük el a fájlt.
}
// INFO: Egyéni taxonómia regisztrálása a közreműködők számára
function register_co_authors_taxonomy()
{
$labels = array(
'name' => __('Közreműködők'),
'singular_name' => __('Közreműködők'),
'search_items' => __('Közreműködő keresése'),
'all_items' => __('Minden közreműködő'),
'edit_item' => __('Szerkesztés'),
'update_item' => __('Frissítés'),
'add_new_item' => __('Új közreműködő'),
'new_item_name' => __('Új közreműködő neve'),
'menu_name' => __('Közreműködők'),
);
$args = array(
'hierarchical' => false,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'update_count_callback' => '_update_post_term_count',
'query_var' => true,
'rewrite' => array('slug' => 'co-author'),
);
register_taxonomy('co_author', 'post', $args);
}
add_action('init', 'register_co_authors_taxonomy');
// INFO: Meta box hozzáadása a közreműködők kiválasztásához a bejegyzés szerkesztő felületen
function add_co_authors_meta_box()
{
add_meta_box(
'co_authors_meta_box',
__('Közreműködők'),
'render_co_authors_meta_box',
'post',
'side',
'default'
);
}
add_action('add_meta_boxes', 'add_co_authors_meta_box');
// INFO: A közreműködők meta box megjelenítése
function render_co_authors_meta_box($post)
{
$co_authors = wp_get_post_terms($post->ID, 'co_author', array('fields' => 'ids'));
$all_co_authors = get_terms(array('taxonomy' => 'co_author', 'hide_empty' => false));
echo '<ul>';
foreach ($all_co_authors as $co_author) {
$checked = in_array($co_author->term_id, $co_authors) ? 'checked="checked"' : '';
echo '<li><label><input type="checkbox" name="co_authors[]" value="' . esc_attr($co_author->term_id) . '" ' . $checked . ' /> ' . esc_html($co_author->name) . '</label></li>';
}
echo '</ul>';
// INFO: Új közreműködő hozzáadása
echo '<input type="text" id="new_co_author_name" name="new_co_author_name" value="" placeholder="' . __('Új közreműködő neve') . '"/>';
echo '<button type="button" id="add_new_co_author">' . __('Új közreműködő hozzáadása') . '</button>';
}
// A közreműködők mentése a bejegyzés mentésekor
function save_co_authors_meta_box($post_id)
{
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
// Ellenőrizzük, hogy a felhasználónak van-e jogosultsága a bejegyzés szerkesztésére
if (!current_user_can('edit_post', $post_id)) {
return;
}
// Ha nincs közreműködő kiválasztva, akkor töröljük az összes közreműködőt
if (!isset($_POST['co_authors'])) {
wp_set_post_terms($post_id, array(), 'co_author');
} else {
// Mentjük a kiválasztott közreműködőket
$co_authors = array_map('intval', $_POST['co_authors']);
wp_set_post_terms($post_id, $co_authors, 'co_author');
}
}
add_action('save_post', 'save_co_authors_meta_box');
// Egyéni mezők hozzáadása a közreműködők taxonómia szerkesztő felületéhez
function add_co_author_fields($term)
{
// Ellenőrizzük, hogy a $term változó egy objektum
if (is_object($term)) {
$url = get_term_meta($term->term_id, 'co_author_url', true);
} else {
$url = '';
}
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="co_author_url"><?php _e('URL'); ?></label></th>
<td>
<input type="text" name="co_author_url" id="co_author_url" value="<?php echo esc_attr($url); ?>" />
<p class="description"><?php _e('Adj hozzá linket a közreműködőhöz'); ?></p>
</td>
</tr>
<?php
}
add_action('co_author_edit_form_fields', 'add_co_author_fields');
add_action('co_author_add_form_fields', 'add_co_author_fields');
// Egyéni mező adatainak mentése a közreműködők taxonómia szerkesztésekor
function save_co_author_fields($term_id)
{
if (isset($_POST['co_author_url'])) {
update_term_meta($term_id, 'co_author_url', esc_url_raw($_POST['co_author_url']));
}
}
add_action('edited_co_author', 'save_co_author_fields');
add_action('created_co_author', 'save_co_author_fields');
// A közreműködők megjelenítése az egyedi bejegyzés sablonban
function display_co_authors()
{
global $post;
if (is_singular('post')) {
$co_authors = wp_get_post_terms($post->ID, 'co_author');
if (!empty($co_authors) && !is_wp_error($co_authors)) {
echo '<br><br><div class="co-authors"><h4>' . __('Közreműködők') . ':</h4><hr>';
foreach ($co_authors as $co_author) {
$url = get_term_meta($co_author->term_id, 'co_author_url', true);
if (!empty($url)) {
echo '<a href="' . esc_url($url) . '">' . esc_html($co_author->name) . '</a>, ';
} else {
echo '' . esc_html($co_author->name) . ', ';
}
}
echo '</div>';
}
}
}
// add_action('wp_footer', 'display_co_authors');
// AJAX hívás kezelése új közreműködő hozzáadásához
function handle_add_co_author()
{
$coAuthorName = sanitize_text_field($_POST['name']);
if (term_exists($coAuthorName, 'co_author')) {
wp_send_json_error(['message' => 'Ez a közreműködő már létezik!']);
} else {
$term = wp_insert_term($coAuthorName, 'co_author');
if (is_wp_error($term)) {
wp_send_json_error(['message' => 'Hiba történt a közreműködő hozzáadása közben.']);
} else {
wp_send_json_success();
}
}
}
add_action('wp_ajax_add_co_author', 'handle_add_co_author');
// JavaScript és AJAX hozzáadása a WordPress adminhoz
function enqueue_admin_scripts($hook)
{
if ($hook != 'post.php' && $hook != 'post-new.php') {
return;
}
wp_enqueue_script('add-co-author-ajax', get_template_directory_uri() . '/template-parts/contributor.js', array('jquery'), null, true);
}
add_action('admin_enqueue_scripts', 'enqueue_admin_scripts');
?>