Как удалить мета-значение во всех постах WordPress? - PullRequest
1 голос
/ 13 января 2020

Я работаю над блогом, и я хочу добавить баннер, который является популярным постом.

Но я не уверен, как сделать так, чтобы только один пост был помечен как «Избранный», поэтому, если другой пост помечен как «Избранный», он удаляет старый пост как показанный как избранный.

Я пытался использовать флажок ACF (Advance Custom Field), чтобы пометить избранные сообщения, но мой подход неверен.

Вот мой код.

<?php
global $post;

$myposts = get_posts( array(
    'posts_per_page'   => 1,
    'order'            => 'DESC',
    'numberposts'      => 1,
) );

if ( $myposts ) {
    foreach ( $myposts as $post ) : 
        setup_postdata( $post ); 
        if(get_field('featured_post')):
?>

После того, как я отметил другие записи, ничего не появляется.

Планирую следовать этому подходу , но я понятия не имею, как удалить старые избранные сообщения.

1 Ответ

1 голос
/ 13 января 2020

Флажок ACF / True / False - хорошая отправная точка. Решение этой проблемы заключается в том, чтобы ...

  1. перехватить действие acf/save_post
  2. , чтобы проверить, имеет ли в настоящее время сохраненное сообщение featured_post разрешено
  3. если включено, снимите флажок «Featured» в ранее показанном сообщении
  4. , если включено, сохраните идентификатор сообщения в качестве глобальной опции для избранного сообщения («mysites_featured_post»)
  5. при отображении баннера получить идентификатор избранного сообщения из этой опции

Для этой опции вы можете сделать две вещи: использовать собственную update_option WP или создать страницу параметров ACF с полем Post, содержащим только один (рекомендуемый) пост. Преимущество страницы параметров ACF заключается в том, что вы можете вручную редактировать избранные сообщения в wp-admin, перейдя на страницу параметров.

Однако я продемонстрирую это с использованием WP update_option:

* 1023. *

Таким образом, мы добились отключения флажка «Избранные» на ранее выбранном посте (если он существовал) и сохранили идентификатор нового избранного поста в опции «mysites_featured_post».

К тому времени получить избранное сообщение для рендеринга баннера, вы можете получить $post_id из опции:

$featured_post_id = get_option('mysites_featured_post', false);
if ($featured_post_id) {
  $post = get_post( $featured_post_id );
  // render the post('s ID)
  // ...
}

Это решение простое и эффективное в том смысле, что ему не нужно перебирать / запрашивать все сообщения 'мета записи, чтобы найти текущее сообщение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...