При роботі з WordPress час від часу може знадобитися налаштувати панель адміністратора в залежності від конкретних метаданих поста. У цьому розділі ми розглянемо питання приховування панелі адміністратора відповідно до значення метаданих поста. Давайте розглянемо рішення більш докладно:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
<?php $post_types = get_post_types(); $i = 1; ?> <div class="container"> <form id="tableform" method="post"> <table class="table-style" class="right"> <thead> <th>Тип поста</th> <th>Статус</th> </thead> <?php // Перебираємо кожен тип поста foreach ($post_types as $post_type) { // Аргументи для WP_Query (налаштовуємо за потребою) $args = array( 'post_type' => $post_type, 'post_status' => 'any', 'posts_per_page' => -1, // Отримуємо всі пости ); $the_query = new WP_Query($args); // Перебираємо кожен пост if ($the_query->have_posts()) { //while ($the_query->have_posts()) { $the_query->the_post(); // Перевіряємо, чи є у поста метадані 'admin_bar_status' if (metadata_exists('post', get_the_ID(), 'admin_bar_status')) { // Отримуємо метадані 'admin_bar_status' $admin_bar_status = get_post_meta(get_the_ID(), 'admin_bar_status', true); ?> <tr> <td> <?php echo $post_type; ?> </td> <td align=center> <label class="toggle-switchy" data-size="sm"> <?php if ($admin_bar_status == 1) { ?> <input type="checkbox" id="example2" onchange="submitPostType('<?php echo $post_type; ?>')" checked> <span class="toggle"> <span class="switch"></span> </span> <?php } else { ?> <input type="checkbox" id="example2" onchange="submitPostType('<?php echo $post_type; ?>')"> <span class="toggle"> <span class="switch"></span> </span> <?php } ?> </label> </td> </tr> <?php } } } ?> </table> </form> <script> function submitPostType(postType) { var form = document.getElementById('tableform'); var input = document.createElement('input'); input.type = 'hidden'; input.name = 'postType'; input.value = postType; form.appendChild(input); form.submit(); } </script> </div> <?php if ($_SERVER["REQUEST_METHOD"] == "POST") { $post_type = $_POST['postType']; _update_post_type_metadata($post_type); } ?> |
Тепер давайте займемося основною проблемою: функція, яка читає метадані, не може приховати панель адміністратора для конкретної сторінки з ‘admin_bar_status’ == 0 або приховати її для всіх типів.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php add_action('template_redirect', 'set_admin_bar'); function set_admin_bar() { // Отримуємо всі зареєстровані типи постів $post_types = get_post_types(); foreach ($post_types as $post_type) { // Отримуємо статус панелі адміністратора для поточного типу поста $args = array( 'post_type' => $post_type, 'post_status' => 'any', 'posts_per_page' => -1, // Отримуємо всі пости ); $posts = get_posts($args); foreach ($posts as $post) { $admin_bar_status = get_post_meta($post->ID, 'admin_bar_status', true); // Приховуємо панель адміністратора, якщо метадані встановлені на 0 if ($admin_bar_status === '0') { show_admin_bar(false); } } } } ?> |
Це рішення допоможе вам ефективно приховати панель адміністратора в залежності від значення метаданих поста. Якщо у вас виникають будь-які проблеми або є подальші питання, не соромтеся питати!