我有一个书签/收藏夹帖子的循环,对于一个新帐户,如果您在书签页面上没有书签帖子,则会显示以下消息:Bummer,no bookmarks posts!
在新帐号添加1个帖子到书签后,帖子会出现在书签页面上,一切都很好。
但是,如果新帐号从他的书签帖子中删除了一条书签帖子,那么页面上将显示wordpress的所有帖子,而不是这条消息:糟糕,没有书签帖子!
我需要设置什么来显示相同的消息,而不是wordpress的所有帖子?
这是我的循环:
<?php
if(!is_user_logged_in() ) {
?>
<div class="side-article">
<h2><?php _e(\'Please login if you want to see bookmarked posts!\', \'Aruna\');?></h2>
</div>
<?php }
else {
$current_user = wp_get_current_user();
$bookmarks = get_user_meta($current_user->ID, \'bookmarks\', true);
if($bookmarks) {
$bookmarks = unserialize($bookmarks);
//Bookmarks
$args = array();
$args[\'post_type\'] = \'post\';
$args[\'post__in\'] = $bookmarks;
$args[\'order\'] = \'DESC\';
$args[\'posts_per_page\'] = 8;
//performance improvements
$args[\'no_found_rows\'] = true;
$args[\'update_post_term_cache\'] = true;
$args[\'update_post_meta_cache\'] = true;
$paged = is_front_page() ? get_query_var( \'page\' ) : get_query_var( \'paged\' );
$args[\'paged\'] = $paged;
$wp_query = new WP_Query($args);
if ($wp_query->have_posts()) :
while ($wp_query->have_posts()) : $wp_query->the_post();
get_template_part( \'content\', get_post_format() );
endwhile; wp_reset_postdata();
get_template_part(\'includes/pagination\');
endif;
?>
<?php
} else { ?>
<div>
<h2><?php _e("Bummer, no bookmarks posts!", \'Aruna\');?></h2>
</div>
<?php }
} ?>
功能。php:
function teo_bookmark_submit() {
// get the submitted parameters
$postID = $_POST[\'post_id\'];
$current_user = wp_get_current_user();
$bookmarks = get_user_meta($current_user->ID, \'bookmarks\', true);
if(empty($bookmarks) ) {
$bookmarks = array();
}
else {
$bookmarks = unserialize($bookmarks);
}
if(!in_array($postID, $bookmarks) ) {
$bookmarks[] = $postID;
}
$bookmarks = serialize($bookmarks);
update_user_meta($current_user->ID, \'bookmarks\', $bookmarks);
exit;
}
function teo_bookmark_remove() {
// get the submitted parameters
$postID = $_POST[\'post_id\'];
$current_user = wp_get_current_user();
$bookmarks = get_user_meta($current_user->ID, \'bookmarks\', true);
$bookmarks = unserialize($bookmarks);
if(in_array($postID, $bookmarks) ) {
$index = array_search($postID, $bookmarks);
unset($bookmarks[$index]);
}
$bookmarks = serialize($bookmarks);
update_user_meta($current_user->ID, \'bookmarks\', $bookmarks);
exit;
}
SO网友:CK MacLeod
好的,首先,您不需要序列化/取消序列化。get_user_meta()
将返回一个数组,并且delete_user_meta()
可以删除特定值。
因此,简化这里和下面的其他一些内容,您的remove函数的工作方式如下(非常简单):
function teo_bookmark_remove() {
$postID = $_POST[\'post_id\'];
$current_user = get_current_user_id();
delete_user_meta( $current_user, \'bookmarks\', $postID );
}
同样,bookmarks submit:非常简单(虽然可能在这里和之前的函数中,您应该使用nonces或其他安全功能-不确定其余设置如何处理此问题):
function teo_bookmark_submit() {
// get the submitted parameters
$postID = $_POST[\'post_id\'];
$current_user = get_current_user_id();
update_user_meta( $current_user, \'bookmarks\', $postID );
}
现在显示功能:
if (!is_user_logged_in() ) {
?>
<div class="side-article">
<h2><?php _e(\'Please login if you want to see bookmarked posts!\', \'Aruna\');?></h2>
</div>
<?php } else {
$current_user = get_current_user_id();
$bookmarks = get_user_meta($current_user, \'bookmarks\'); //returns array
if ( ! empty($bookmarks) ) {
$args = array();
$args[\'post_type\'] = \'post\';
$args[\'post__in\'] = $bookmarks; //post__in takes array
$args[\'order\'] = \'DESC\';
$args[\'posts_per_page\'] = 8;
//performance improvements
$args[\'no_found_rows\'] = true;
$args[\'update_post_term_cache\'] = true;
$args[\'update_post_meta_cache\'] = true;
$paged = is_front_page() ? get_query_var( \'page\' ) : get_query_var( \'paged\' );
$args[\'paged\'] = $paged;
$wp_query = new WP_Query($args);
if ($wp_query->have_posts()) {
while ($wp_query->have_posts()) : $wp_query->the_post();
get_template_part( \'content\', get_post_format() );
endwhile;
wp_reset_postdata();
get_template_part(\'includes/pagination\');
}
} else { ?>
<div>
<h2><?php _e("Bummer, no bookmarks posts!", \'Aruna\');?></h2>
</div>
<?php }
}
测试了“无书签”部分-给您带来问题的部分。当然,不能完全保证$bookmarks非空选项的结果,但可以使用简单的is_empty测试。
注意:我相信在上述函数中,相同的值最终可能会在“bookmarks”数组中出现多次。我认为post\\u in或delete\\u post\\u meta(将删除与键相关的特定值的所有实例)不会有问题,但如果您将“bookmarks”数组用于其他目的,则可能会有问题。如果需要的话,不难解决。