如何删除所有WordPress帖子中的元值?
我在一个博客上工作,我想添加一个横幅,这是一篇特色文章 但我不知道如何才能使只有一篇文章被标记为“特色”,因此,如果另一篇文章被标记为“特色”,它将删除显示为特色的旧文章 我曾尝试使用ACF(高级自定义字段)复选框标记特色文章,但我的方法不正确 这是我的密码如何删除所有WordPress帖子中的元值?,wordpress,Wordpress,我在一个博客上工作,我想添加一个横幅,这是一篇特色文章 但我不知道如何才能使只有一篇文章被标记为“特色”,因此,如果另一篇文章被标记为“特色”,它将删除显示为特色的旧文章 我曾尝试使用ACF(高级自定义字段)复选框标记特色文章,但我的方法不正确 这是我的密码 <?php global $post; $myposts = get_posts( array( 'posts_per_page' => 1, 'order' => 'DESC'
<?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')):
?>
一旦我在其他帖子上做了标记,就什么都没有显示
我打算这样做,但我不知道如何删除旧的特色帖子。ACF复选框/True/False字段是一个很好的起点。从那以后的解决办法是
acf/save\u post
操作featured\u post
update\u选项
,或者创建一个带有Post
字段的ACF选项页面,该字段只包含一篇(特色)文章。ACF选项页面的优点是,您可以导航到选项页面,在wp admin中手动编辑特色文章
但是,我将使用WP的update\u选项来演示它:
function hookACFSavePost($post_id) {
$marked_featured = get_field('featured_post', $post_id);
if ($marked_featured) {
// get previously featured post
$prev_featured_post = get_option('mysites_featured_post', false);
if (is_numeric($prev_featured_post)) {
// disable featured flag on the previously featured post, for consistency:
update_field('featured_post', false, $prev_featured_post);
}
// store this as the current featured post
update_option('mysites_featured_post', $post_id, true);
}
}
add_action('acf/save_post', 'hookACFSavePost', 20);
这样,我们就可以在以前选择的帖子(如果存在)上禁用“特色”复选框,并将新特色帖子的ID存储在“mysites\u featured\u post”选项中
要获取用于呈现横幅的特色帖子,您可以从以下选项中检索$post\u 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)
// ...
}
此解决方案简单而高效,因为它不必迭代/查询所有帖子的元条目来查找当前特色帖子。使用ACF进行此操作的更好方法是依赖内置选项页面。为选项页面创建一个名为“特色文章”或其他内容的字段。您可以将其设置为下拉列表,以便只能选择一篇文章。