我正在写博客,我想添加一个横幅,这是一个特色文章。
但是我不确定如何只将一个帖子标记为“精选”,因此,如果将另一帖子标记为“精选”,则将旧帖子从显示为精选中删除。
我尝试使用ACF(高级自定义字段)复选框标记特色帖子,但是我的方法不正确。
这是我的代码。
<?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_post
动作featured_post
启用对于该选项,您可以做两件事:使用WP自己的update_option
,或创建一个ACF选项页,其中的Post
字段仅包含一个(精选)帖子。ACF选项页面的优势在于,您可以通过导航到选项页面在wp-admin中手动编辑精选帖子。
但是,我将使用WP进行演示update_option
:
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_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)
// ...
}
从不必遍历/查询所有帖子的元条目来查找当前具有特色的帖子的意义上说,此解决方案简单有效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句