Intereting Posts
Отображение таблицы базы данных в backend wordpress Файл Js не добавляется с помощью этого кода в functions.php Контактная форма 7 – Отладка отправки сообщений об отказе по электронной почте В чем разница между прямым вызовом функции и вызовом функции с помощью add_action? Как указать то же сообщение об ошибке, когда используется неправильный пароль или неправильное имя пользователя? фоновые изображения WP Supersized на главной странице Кнопка Share Like SuperUser Настройки постоянной привязки добавление нескольких боковых панелей на страницах WordPress: загрузить все файлы активов, поступающие с HTTP на HTTPS? Как удалить логотип admin bar в WordPress с помощью плагина Выберите либо выдержку, либо the_content Заказать результаты поиска по категориям Добавить ссылки для публикации категорий и таксономий в wysiwyg link modal? Как загрузить дополнительные сообщения пользовательского типа с помощью кнопки AJAX и LOAD MORE POSTS

Добавить поле в сообщения (флажок), который может иметь только один пост

Я пытаюсь добавить поле в сообщения WordPress (а не страницы), которые просто включают метку и флажок. Что-то вроде: Сделайте это липким сообщением? Если проверить, ключ должен быть установлен в TRUE или что-то, что легко доступно. Проблема, однако, в том, что я хочу, чтобы только одно сообщение имело значение TRUE. Это означает, что когда я проверил поле в post-1, а затем я проверю это поле в post-2, значение поля post-1 должно быть установлено в FALSE, чтобы только одно сообщение могло иметь TRUE в одно и то же время.

Затем я бы зациклил сообщение в своем index.php, чтобы получить сообщение с значением == ИСТИНА и отобразить его где-то на странице. Что-то вроде этого (не проверено):

$args = array( 'order' => 'DESC', 'posts_per_page' => 1, 'meta_key' => 'post_sticky', ), ); $stickyPost = new WP_Query( $args ); 

В идеале я хочу, чтобы это поле было задано в моем файле functions.php , но из того, что я собрал в Интернете, это не так просто, как должно быть. Вы можете добавлять поля в WordPress самостоятельно, но я не хочу этого делать, потому что я зависим от писателей, и я не хочу, чтобы они возились.

EDIT: видимо, когда ни одна запись не проверяется как подсветка, отображаются 4 сообщения (что равно, насколько я допускаю на индексной странице). Нужно ли мне сбросить данные сообщения основного цикла до вызова этого цикла? Тем не менее, я ожидал бы, что в случае, если есть сообщения, будут исключены любые другие должности, кроме липких. Это код в файле sidebar.php:

 <?php $args = array( 'p' => get_option('my_sticky_post') ); $stickyPost = new WP_Query($args); ?> <?php if($stickyPost->have_posts()) : while($stickyPost->have_posts()) : $stickyPost->the_post(); ?> <aside class="highlight"> <h3>Must-read</h3> <div class="sidebar-content"> <div class="thumbnail"> <?php $image_id = get_post_thumbnail_id(); $image_url = wp_get_attachment_image_src($image_id,'home-featured'); ?> <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>" style="background-image: url('<?php echo $image_url[0]; ?>');"><span><?php the_title(); ?></span></a> </div> <?php the_excerpt(); ?> </div> </aside> <?php endwhile; ?> <?php endif; ?> <?php wp_reset_postdata(); ?> в <?php $args = array( 'p' => get_option('my_sticky_post') ); $stickyPost = new WP_Query($args); ?> <?php if($stickyPost->have_posts()) : while($stickyPost->have_posts()) : $stickyPost->the_post(); ?> <aside class="highlight"> <h3>Must-read</h3> <div class="sidebar-content"> <div class="thumbnail"> <?php $image_id = get_post_thumbnail_id(); $image_url = wp_get_attachment_image_src($image_id,'home-featured'); ?> <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>" style="background-image: url('<?php echo $image_url[0]; ?>');"><span><?php the_title(); ?></span></a> </div> <?php the_excerpt(); ?> </div> </aside> <?php endwhile; ?> <?php endif; ?> <?php wp_reset_postdata(); ?> 

EDIT 2: мы можем проверить наличие опции «my_sticky_post». Если он не существует, WP вернет FALSE. Поэтому следующие работы:

 <?php $stickyId = get_option('my_sticky_post'); if ($stickyId) : $args = array( 'p' => $stickyId ); $stickyPost = new WP_Query($args); if($stickyPost->have_posts()) : while($stickyPost->have_posts()) : $stickyPost->the_post(); ?> <aside class="highlight"> <h3>Must-read</h3> <div class="sidebar-content"> <div class="thumbnail"> <?php $image_id = get_post_thumbnail_id(); $image_url = wp_get_attachment_image_src($image_id,'home-featured'); ?> <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>" style="background-image: url('<?php echo $image_url[0]; ?>');"><span><?php the_title(); ?></span></a> </div> <?php the_excerpt(); ?> </div> </aside> <?php endwhile; // have posts ?> <?php endif; // have posts ?> <?php wp_reset_postdata(); ?> <?php endif; // $stickyId ?> в <?php $stickyId = get_option('my_sticky_post'); if ($stickyId) : $args = array( 'p' => $stickyId ); $stickyPost = new WP_Query($args); if($stickyPost->have_posts()) : while($stickyPost->have_posts()) : $stickyPost->the_post(); ?> <aside class="highlight"> <h3>Must-read</h3> <div class="sidebar-content"> <div class="thumbnail"> <?php $image_id = get_post_thumbnail_id(); $image_url = wp_get_attachment_image_src($image_id,'home-featured'); ?> <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>" style="background-image: url('<?php echo $image_url[0]; ?>');"><span><?php the_title(); ?></span></a> </div> <?php the_excerpt(); ?> </div> </aside> <?php endwhile; // have posts ?> <?php endif; // have posts ?> <?php wp_reset_postdata(); ?> <?php endif; // $stickyId ?> 

Solutions Collecting From Web of "Добавить поле в сообщения (флажок), который может иметь только один пост"

Надеюсь, я правильно понял ваш вопрос, и я надеюсь, что код ниже помогает.

Сначала вы должны добавить метамокси, чтобы удерживать параметр, который вы хотите добавить в каждый пост, и my_add_sticky_metabox() будет делать это в сочетании с add_meta_boxes действия add_meta_boxes .

На этом этапе вы ничего не печатаете, а говорите WordPress для печати с использованием объявленного обратного вызова ( my_output_sticky_metabox() ) всякий раз, когда отображается экран редактирования Post.

Используя my_output_sticky_metabox() печатается содержимое метабокса, включая проверку того, следует ли проверять и / или отключать ящик.

Наконец, правильное значение сохраняется с помощью функции my_save_sticky_metabox() в сочетании с save_post действия save_post .

 add_action('add_meta_boxes', 'my_add_sticky_metabox'); function my_add_sticky_metabox(){ add_meta_box( 'my_sticky_post_metabox', __('Sticky Post', 'my_text_domain'), 'my_output_sticky_metabox', 'post' ); } function my_output_sticky_metabox($post){ /** Grab the current 'my_sticky_post' option value */ $sp = intval(get_option('my_sticky_post')); /** Check to see if the 'my_sticky_post' option should be disabled or checked for the current Post */ $checked = checked($sp, $post->ID, false); if($sp > 0) : $disabled = (!disabled($sp, $post->ID, false)) ? 'disabled="true"' : ''; else : $disabled = ''; endif; /** Add a nonce field */ wp_nonce_field('my_sticky_post_metabox', 'my_sticky_post_metabox_nonce'); /** Add a hidden field to check against in case it is unchecked before save */ $value = ($checked) ? '1' : '0'; echo '<input type="hidden" name="was_checked" value="' . $value . '" />'; /** Output the checkbox and label */ echo '<label for="my_sticky_post">'; echo '<input type="checkbox" id="my_sticky_post" name="my_sticky_post" value="' . $post->ID . '" ' . $checked . $disabled . ' />'; echo 'Make this the sticky post?</label>'; /** Let the user know which Post is currently sticky */ switch($sp) : case 0: $message = 'There is currently no Sticky Post.'; break; case $post->ID: $message = 'This Post is the Sticky Post.'; break; default: $message = '<a href="' . get_edit_post_link($sp) . '" title="' . the_title_attribute('before=Edit post \'&after=\'&echo=0') . '">' . get_the_title($sp) . '</a> is the current Sticky Post'; $message.= '<br />You must remove the sticky status from that post before you can make this one sticky.'; endswitch; echo '<p><em>' . $message .'</em></p>'; } add_action('save_post', 'my_save_sticky_metabox'); function my_save_sticky_metabox($post_id){ /* * We need to verify this came from our screen and with proper authorization, * because the save_post action can be triggered at other times. */ /** Ensure that a nonce is set */ if(!isset($_POST['my_sticky_post_metabox_nonce'])) : return; endif; /** Ensure that the nonce is valid */ if(!wp_verify_nonce( $_POST['my_sticky_post_metabox_nonce'], 'my_sticky_post_metabox')) : return; endif; /** Ensure that an AUTOSAVE is not taking place */ if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) : return; endif; /** Ensure that the user has permission to update this option */ if(!current_user_can('edit_post', $post_id)) : return; endif; /** * Everything is valid, now the option can be updated */ /** Check to see if the 'my_sticky_post' option was checked */ if(isset($_POST['my_sticky_post'])) : // It was... update_option('my_sticky_post', $_POST['my_sticky_post']); // Update the option else : // It was not... /** Check to see if the option was checked prior to the options being updated */ if($_POST['was_checked'] != 0) : // It was... update_option('my_sticky_post', -1); // Set the option to '-1' endif; endif; } 

Теперь, когда вы хотите захватить свой собственный липкий пост, вы используете этот запрос –

 $args = array( 'p' => get_option('my_sticky_post') ); $stickyPost = new WP_Query($args); if($stickyPost->have_posts()) : while($stickyPost->have_posts()) : $stickyPost->the_post(); { Your code goes here } endwhile; endif; wp_reset_postdata(); 

Существует много материалов для чтения, которые я бы посоветовал вам взглянуть сюда, надеюсь, он ответит на любые вопросы, которые могут возникнуть по поводу кода выше –

  • Действие add_meta_boxes
  • Действие save_post
  • Функция add_meta_box()
  • Функция checked()
  • Функция disabled()

редактировать

Вы отмечаете, что если личная запись не задана, у вас есть 4 сообщения на index.php (это ваш стандартный номер).

Я считаю, что это связано p тем, что если параметр p пуст, он игнорируется, поэтому вам нужно проверить значение параметра my_sticky_post .

Внесите это изменение в массив $args (и обратите внимание на дополнительную строку выше) –

 $sticky_id = get_option('my_sticky_post'); $args = array( 'p' => ($sticky_id) ? $sticky_id : '-1' );