ADD_POST_META将元添加到另一个不同的帖子

时间:2017-07-17 作者:Erik G

当查看包含密钥的帖子时,我试图保存帖子元userid:x 这个信息让我知道当前用户是否读过这篇文章(之后在侧栏中发出通知)。

我通过在single.php 紧接着the_content();:

<?php if ( in_category( \'oznamy\' )) { 

    $current_user = wp_get_current_user();
    $currentuserid = $current_user->ID;
    $towrite = "userid:";
    $meta_key = $towrite . $currentuserid;

    $meta_value = $post->ID ;
    add_post_meta($post->ID , $meta_key, $meta_value, true); 

} ?>
它确实保存了当前显示的帖子的meta值,但是它总是为另一篇帖子保存meta值。

将meta值设置为post ID只是为了检查它保存到不同post的内容。它保存不同帖子的ID,但该帖子不会显示在single.php

因此,如果我查看前端的post 676,它会保存元键userid:1 和价值676, 这就是我想要的。然而,它也为key保存了metauserid:1 和价值674 对于post ID674 未显示。

为什么会single.php 甚至触摸不同的ID?

更新:整单。php代码如下:

<?php get_header(); ?>

<?php get_template_part(\'template-part\', \'head\'); ?>

<?php get_template_part(\'template-part\', \'topnav\'); ?>

<!-- start content container -->
<div class="row dmbs-content">

    <?php //left sidebar ?>
    <?php get_sidebar( \'left\' ); ?>

    <div class="col-md-<?php devdmbootstrap3_main_content_width(); ?> dmbs-main">

        <?php

            //if this was a search we display a page header with the results count. If there were no results we display the search form.
            if (is_search()) :

                 $total_results = $wp_query->found_posts;

                 echo "<h2 class=\'page-header\'>" . sprintf( __(\'%s Search Results for "%s"\',\'devdmbootstrap3\'),  $total_results, get_search_query() ) . "</h2>";

                 if ($total_results == 0) :
                     get_search_form(true);
                 endif;

            endif;

        ?>


<?php
    global $current_user;
    get_currentuserinfo();

?>


<?php if( is_user_member_of_blog( $current_user->ID ) ): ?>

<?php if( is_user_logged_in() ): ?>
<script>
$("#menu-item-508").addClass("active");
</script>



            <?php // theloop
                if ( have_posts() ) : while ( have_posts() ) : the_post();

                    // single post
                    if ( is_single() ) : ?>

                        <div <?php post_class(); ?>>

                            <h2 class="page-header-single"><?php the_title() ;?></h2>
                            <?php if ( has_post_thumbnail() ) : ?>
                                <?php the_post_thumbnail(); ?>
                                <div class="clear"></div>
                            <?php endif; ?>

                            <?php the_content(); ?>


<!-- zapis id usera ktory precital oznam -->
<?php if ( in_category( \'oznamy\' )) { 


  $current_user = wp_get_current_user();
  $currentuserid = $current_user->ID;
  $towrite = "userid:";
  $meta_key = $towrite . $currentuserid;




$meta_value = $post->ID ;
add_post_meta($meta_value , $meta_key, $meta_value, true); 


} ?>

<!-- koniec zapis id usera ktory precital oznam -->



                            <?php wp_link_pages(); ?>
                            <?php get_template_part(\'template-part\', \'postmeta\'); ?>

Komentáre:
                            <?php comments_template(); ?>

                        </div>
                    <?php
                    // list of posts
                    else : ?>
                       <div <?php post_class(); ?>>

                            <h2 class="page-header">
                                <a href="<?php the_permalink(); ?>" title="<?php echo esc_attr( sprintf( __( \'Permalink to %s\', \'devdmbootstrap3\' ), the_title_attribute( \'echo=0\' ) ) ); ?>" rel="bookmark"><?php the_title(); ?></a>
                            </h2>

                            <?php if ( has_post_thumbnail() ) : ?>
                               <?php the_post_thumbnail(); ?>
                                <div class="clear"></div>
                            <?php endif; ?>
                            <?php the_content(); ?>
                            <?php wp_link_pages(); ?>
                            <?php get_template_part(\'template-part\', \'postmeta\'); ?>
                            <?php  if ( comments_open() ) : ?>
                                   <div class="clear"></div>
                                  <p class="text-right">
                                      <a class="btn btn-success" href="<?php the_permalink(); ?>#comments"><?php comments_number(__(\'Leave a Comment\',\'devdmbootstrap3\'), __(\'One Comment\',\'devdmbootstrap3\'), \'%\' . __(\' Comments\',\'devdmbootstrap3\') );?> <span class="glyphicon glyphicon-comment"></span></a>
                                  </p>
                            <?php endif; ?>
                       </div>

                     <?php  endif; ?>

                <?php endwhile; ?>
                <?php posts_nav_link(); ?>
                <?php else: ?>

                    <?php get_404_template(); ?>

            <?php endif; ?>
<?php else:
  wp_die(\'Unauthorized.\');
endif; ?>

<?php else:
  wp_die(\'Unauthorized.\');
endif; ?>
   </div>

   <?php //get the right sidebar ?>
   <?php get_sidebar( \'right\' ); ?>

</div>
<!-- end content container -->

<?php get_footer(); ?>

1 个回复
SO网友:Johansson

正确的方法是检查你是否在一个页面上,如果是,那么检查你的帖子是否有oznamy 设置为其类别之一。

让我们按照以下方式重写代码:

if ( is_single() && in_category( \'oznamy\' , get_the_ID() ) ) {
    // Get the current user
    $current_user = wp_get_current_user();
    $currentuserid = $current_user->ID;
    // Update the post\'s meta
    update_post_meta($post->ID , \'userid:\'.$currentuserid , $post->ID); 
} 
重要注意事项此代码应用于functions.php 您可能无意中访问了另一篇文章,而不是直接在模板文件中使用,这也会导致为该文章保存元数据。你没有发布你的single.php\'的内容,所以我不知道你是否有另一个帖子被加载到一边update_post_meta 而不是add_post_meta 除非您希望每次访问都能保存一百万元数据in_category() 函数,它是帖子的ID。这可能会解决您的问题,只需设置当前帖子的ID即可。is_single() 也接受相同的参数

结束

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在