zoukankan      html  css  js  c++  java
  • 解决WordPress 页面无法评论的问题

    最近在使用WordPress制作一个企业网站,因为是企业网站所以文章和页面都不需要评论功能,因此在主题里禁用掉了评论功能

    //禁用页面和文章的评论功能
    //add_filter('the_posts','htl_disable_page_comments');

    //添加时禁用页面和文章的评论功能

    add_filter('add_posts','htl_disable_page_comments');
    function htl_disable_page_comments( $posts ){
    //if( is_page()){
    $posts[0]->comment_status ='disabled';
    $posts[0]->ping_status ='disabled';
    //}
    return $posts;
    }
    //禁用WordPress的Pingback和Trackback功能
    add_filter('xmlrpc_methods','remove_xmlrpc_pingback_ping');
    function remove_xmlrpc_pingback_ping( $methods ){
    unset( $methods['pingback.ping']);
    return $methods;
    };
    但网站需要有一个联系我们页面即留言功能,于是我就在该页面上通过改造WP的评论功能来实现留言
    //评论自定义字段
    function add_comment_meta_values($comment_id){
    //地址
    if(isset($_POST['address'])){
    $address = wp_filter_nohtml_kses($_POST['address']);
    add_comment_meta($comment_id,'address', $address,false);
    }
    // phone
    if(isset($_POST['Phone'])){
    $Phone = wp_filter_nohtml_kses($_POST['Phone']);
    add_comment_meta($comment_id,'Phone', $Phone,false);
    }
    // comolay
    if(isset($_POST['comolay'])){
    $comolay = wp_filter_nohtml_kses($_POST['comolay']);
    add_comment_meta($comment_id,'comolay', $comolay,false);
    }
    }//end评论自定义字段
    add_action ('comment_post','add_comment_meta_values',1);
    //添加评论自定义字段标题
    function add_comment_meta_title( $columns )
    {
    return array_merge( $columns, array(
    'address'=>'地址',
    'Phone'=>'联系电话',
    'comolay'=>'公司',
    ));
    }//end添加评论自定义字段标题
    add_filter('manage_edit-comments_columns','add_comment_meta_title');
    //输出自定义字段值
    function echo_comment_column_value( $column, $comment_ID )
    {
    echo get_comment_meta( $comment_ID, $column ,true);
    }
    add_filter('manage_comments_custom_column','echo_comment_column_value',10,2);
    然后在留言模板文件中进行制作后并测试
    <?php
    /*TemplateName:购物车模板
    *@author htl
    *@date2014-12-03
    */
    get_header();
    //echo the_id();
    ?>
    <?php get_sidebar()?>
    <div id="neirong">
    <?php
    $query = new WP_Query( array('post_type'=>'post','order'=>'DESC','orderby'=>"ID",'p'=>'3'));
    if(isset($query)&& $query->have_posts()):
    ?>
    <?php
    while($query->have_posts()):
    $query->the_post();
    ?>
    <!-- html代码-->
    <?php
    endwhile;
    else:
    get_template_part('error');
    endif;
    ?>
    </div>
    <?php if( comments_open()):?>
    <!--评论html代码-->
    <?php endif;?>
    </div>
    <?php get_footer();?>
    但结果却返回“抱歉,该项目的评论已关闭”,一开始以为是页面中没有开启评论,后来查看该页面已经开启,然后又将function中的"禁用页面和文章的评论功能"给删除掉结果还是不行
    一直不知道什么原因,于是在页面将当面页面的信息打印出来,而"post_status"却为“disabled”,但数据库中明明为“open”,再一看打印出来的信息,跟我url中的信息完全不一样
    <?php
    $post=get_post(the_id());
    print_r($post);//post_status="disabled"
    if( comments_open()):?>
    但当我把当前页面打印的信息移到$query前面时信息又对了,评论也是开启的。
    最后在”露兜博客“上找到一篇文章,原来如果在当前主循环中调用query_posts,WP_Query等方法,那么当前主循环将会被改变,而在调用the_xx时,此时信息就变成了重新查询后的信息
    知道原因就好解决了,在WordPress文档中有介绍,通过wp_reset_query()和wp_reset_postdata()方法都可以将被更改过的主循环重新恢复回来
     
    修改后的代码,购物车模板
    <?php
    endwhile;
    else:
    get_template_part('error');
    endif;
    //echo the_id();//此时ID为3,the_posts()的信息为$query的信息
    //重置query,否则当前的the_post()为 $query->the_post();,跟当前页面信息不一致
    //在该代码后面再调用the_xxx将会出现问题,因为当前的the_post信息已经被$query修改掉了
    wp_reset_query();
    //wp_reset_postdata();使用 new WP_Query方法重新查询用以恢复当前主循环
    //echo the_id();//id为url中的ID,the_posts()的信息为当前页面的信息
    ?>
     
    参考:
     
     
     
     
     
     





  • 相关阅读:
    02 python网络爬虫《Http和Https协议》
    09 Django之orm中的锁和事务
    08 Django之自定义标签和过滤器
    07 Django之配置静态文件以及渲染图片
    06 Django之模型层---多表操作
    05 Django之模型层---单表操作
    Spring 中的 18 个注解,你会几个?
    一个 Java 对象到底有多大?
    面试题:InnoDB中一棵B+树能存多少行数据?
    Elasticsearch如何做到亿级数据查询毫秒级返回?
  • 原文地址:https://www.cnblogs.com/huangtailang/p/4146560.html
Copyright © 2011-2022 走看看