170 lines
5.6 KiB
PHP
170 lines
5.6 KiB
PHP
|
<?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');
|
||
|
?>
|