Wordpress对动态创建的页面的评论

时间:2012-08-11 18:49:40

标签: php wordpress comments

我在Wordpress中有一个带有自定义模板的自定义页面。除了向用户显示实际页面外,它还通过传入的URL变量动态创建页面。

所以我在wordpress中创建了一个名为News的页面,并将其分配给我的news.php模板。用户可以访问mywebsite.com/news页面

他们也可以转到mywebsite.com/news/2012/august-8/,页面模板通过这些网址变量读取日期,并显示该页面的新闻。

这就是我想要做的。我想在“日期特定页面”中添加注释,这些页面不是wordpress中的实际页面,而是基于url变量动态创建的。

我可以在页面中添加comments_template(),但我相信它基于页面ID或帖子ID ...有没有办法插入自定义ID或插入url来为这些动态页面创建注释?< / p>

我不希望mywebsite.com/news/2012/august-8/上的评论显示在mywebsite.com/news/2012/august-9/上 - 它们是单独的页面

想法?

2 个答案:

答案 0 :(得分:0)

我理解你,但我认为以这种方式使用WP并不是一个好主意。你搞乱了WP的主要功能,他们的帖子和评论。我应该使用另一个框架来完成这项工作。无论如何,调查的良好起点是wp_commentmeta表及其朋友:

add_comment_meta($comment_id, $meta_key, $meta_value, $unique = false)
get_comment_meta( $comment_id, $meta_key, $single = false )

当然,你可以实现你所需要的。

答案 1 :(得分:0)

我知道这个问题已经过时了,但无论如何我都会发布答案,以防人们仍在寻找。老实说,我认为这个功能应该包含在创建动态用户配置文件类型页面的插件中,我不确定开发人员为什么要添加此功能。

只要它们是动态页面中唯一的url的一部分,此方法就可以使用。在我的情况下,我使用网址的第二部分。

  1. 首先,您要在注释中添加一个额外的隐藏注释字段,以抓取部分或全部网址并在文本框中填充它。您可以对您网站上的所有评论执行此操作,也可以像我在一个父页面上只需要它一样使用if查询。

  2. 接下来,您可以确保将此文本框作为额外的评论元数据发布到您的wp_commentmeta表中。现在,对于发布到特定URL的每个注释,您都可以使用唯一ID,可以查询数据库。

        //   adds the extra comment field and populates it with the second part 
        //   of the the url for example (mydomain.com/profile/userid -> $lastpart[2] = userid)
        //   also posts data to database. the ability to edit is there in case you want to show the element
        //   this part would go in your functions.php
    
            function unique_comments_additional_field() {
            global $post_id;
            if(is_page(108)){
    
                $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
                $path = parse_url($url, PHP_URL_PATH);
                $lastpart = explode('/', rtrim($path, '/'));
    
                echo '<p style="display:none;">'.
                '<input id="hiddencoment" name="hiddencoment" placeholder="' . __( 'hiddencoment', 'Extra Field' ) . '"  value="'.$lastpart[2].'" type="text" size="30" /></p>';
        }
    
            add_action( 'comment_form_logged_in_after', 'unique_comments_additional_field' );
            add_action( 'comment_form_after_fields', 'unique_comments_additional_field' );
    
    
            function save_comment_meta_data( $comment_id ) {
    
                if ( ( isset( $_POST['hiddencomment'] ) ) && ( $_POST['hiddencomment'] != '') ) {
                    $hiddencomment = wp_filter_nohtml_kses($_POST['hiddencomment']);
                    add_comment_meta( $comment_id, 'hiddencomment', $hiddencomment );
                }
    
            }
            add_action( 'comment_post', 'save_comment_meta_data' );
    
            function unique_extend_comment_add_meta_box() {
                add_meta_box( 'hiddencomment', __( 'Comment Metadata', 'Extra Field' ), 'unique_extend_comment_meta_box', 'comment', 'normal', 'high' );
            }
            add_action( 'add_meta_boxes_comment', 'unique_extend_comment_add_meta_box' );
    
            function unique_extend_comment_meta_box( $comment ) {
                $hiddencomment = get_comment_meta( $comment->comment_ID, 'hiddencomment', true );
                wp_nonce_field( 'extend_comment_update', 'extend_comment_update', false );
                ?>
                <p>
                <input type="text" style="display:none;" name="hiddencomment" value="<?php echo esc_attr( $hiddencomment ); ?>" class="widefat" />
                </p>
                <?php
            }
    
            function unique_extend_comment_edit_metafields( $comment_id ) {
                if( ! isset( $_POST['extend_comment_update'] ) || ! wp_verify_nonce( $_POST['extend_comment_update'], 'extend_comment_update' ) ) return;
    
                if ( ( isset( $_POST['hiddencomment'] ) ) && ( $_POST['hiddencomment'] != '') ):
                $hiddencomment = wp_filter_nohtml_kses($_POST['hiddencomment']);
                update_comment_meta( $comment_id, 'hiddencomment', $hiddencomment);
                else :
                delete_comment_meta( $comment_id, 'hiddencomment');
                endif;
            }
            add_action( 'edit_comment', 'unique_extend_comment_edit_metafields' );
    
  3. 查询以显示具有与我们刚刚保存到commentmeta表的网址部分匹配的元数值的注释。这将放在您的父帖子页面模板中,即在此示例页面108中

    <ol class="commentlist" style="list-style: none; background: #eee; padding: 10px;">
                <?php
    
                    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
                    $path = parse_url($url, PHP_URL_PATH);
                    $lastpart = explode('/', rtrim($path, '/'));
                    $customer_id = (string)$lastpart[2];
    
                    //Gather comments for a specific page/post 
                    $comments = get_comments(array( 'meta_key' => 'title', 'meta_value' => $customer_id ) );
    
    
                    //Display the list of comments
                    wp_list_comments(array(
                        'per_page' => 10, //Allow comment pagination
                        'reverse_top_level' => true //Show the latest comments at the top of the list
                    ), $comments);
    
                ?>
            </ol>