开发wordpress独立文章发布、编辑页

2013-01-05 1,796 0 技术 大超超。

可能是服务器负载原因,总之我的wordpress后台请求一次PHP程序就要花15秒左右才返回HTML文档,慢吞吞的让人着急。所以就直接写了一个独立的文章发布、编辑页。

先插入页面的界面截图:

这个独立页面我是用一个PHP文件来写的,总体有点乱但是结构是清晰的(为表明结构帖出部分代码,详细代码欢迎交流):

1、引入基础文件,判断访问权限;

include 'include/common.php';
         
if( 某些条件 ){
    die();
}

2、判断是否有POST提交数据,有则处理数据,完毕时结束程序,跳转到首页;

/************** begin 处理post *************/
if( $_POST['submit'] ){
    //准备数据
    //……
    if( $act=='add' ){
        //插入主表
        $sql = "……";
        $res = mysql_query($sql);
        if($res){
            $id = mysql_insert_id();
                     
            //插入点击量……
            //插入分类和标签,标签使用循环……
            trd('发表成功', ROOT_URL);
        }
        else{
            deb('发表失败——主表未能写入数据');  
        }
    }
    else if( $act=='edit' ){
        $id = $_GET['id'];
        $sql = "……";
        $res = mysql_query($sql);
        if($res){
            //处理标签和分类
            //……
            trd('编辑成功', ROOT_URL);
        }
        else{
            deb('编辑失败——主表未能写入数据');  
        }
    }
    //校正term表的count
    term_revise();
}
/************** end 处理post **************/

3、判断是否有GET请求编辑文章,有则初始化相应值;

/************* begin 处理编辑文章 *******************/
if( $act=='edit' ){
    $id = $_GET['id'];
            
    //取文章标题和内容
    $r = mysql_fetch_array(mysql_query("……"));
    $title = $r['post_title'];
    $content = $r['post_content'];
    $pubtime = strtotime($r['post_date']);
            
    //得到分类ID
    $cat_id = mysql_result(mysql_query("……"), 0);
    //得到标签ID数组
    $tag_id_arr = array();
    $res = mysql_query("……");
    while( $r=mysql_fetch_array($res) ){
        $tags_id .= ','.$r['term_taxonomy_id'];
        $tag_id_arr[] = $r['term_taxonomy_id'];
    }
            
    $hidden_input .= '<input type="hidden"
    name="cat_id_ori" value="'.$cat_id.'" />';
    $hidden_input .= '<input type="hidden"
    name="tags_id_ori" value="'.$tags_id.'" />';
}
/**************** end 处理编辑文章 *****************/

4、取分类和标签的相关信息,存入变量中,至此主要PHP程序结束;

//取分类名和ID
$cat_select = '
<select name="cat_id" id="cat_id">
    <option value="0">-请选择-</option>
';
$sql = "……";
$res = mysql_query($sql);
while( $r=mysql_fetch_array($res) ){
    if( $act=='edit' )
      $selected = ( $r['term_id']==$cat_id ) ? ' selected="selected"' : '';
    $cat_select .= '……';
}
$cat_select .= '</select>';
        
//取所有标签
$tag_list = '<span id="tags_wrap">';
$sql = "……";
$res = mysql_query($sql);
while( $r=mysql_fetch_array($res) ){
    $data_selected = ' data-select="0"';
    if( $act=='edit' && in_array($r['term_id'], $tag_id_arr) ){
        $data_selected = ' data-select="1"';
    }
    $tag_list .= '……';
}
$tag_list .= '</span>';
        
$pubtime = ( $pubtime ) ? $pubtime : time();
$title_prefix = ( $act=='add' ) ? '发布' : '编辑';

5、接下来输出HTML内容,javascript功能写在head标签里;

//初始化消息框
$.msg_box('msg_box_initial()');
        
//绑定标签元素的事件
bind_tag();
        
//ajax添加标签
$('#add_tag').unbind('click').click(function(){
    var self_buttom = $(this);
    var tag_name = $("#tag").val();
    if( tag_name=='' ){
        $.msg_box('请填写需要添加的标签');
        $("#tag").focus();
        return;
    }
            
    self_buttom.attr('disabled', 'disabled');
    params = {act:'add_tag', name:tag_name};
    $.post('ajax.php', params, function(d){
        if( d!='0' ){
            $('#tags_wrap').append(d);
            $("#tag").val('');
            self_buttom.removeAttr('disabled');
            bind_tag();
        }
        else{
            $.msg_box('数据库暂未响应');   
        }
    });
});
        
//need_password,显示加密行
$('#need_password').click(function(){
    $('#password_tr').show();
});

6、表单内容在body里,使用ueditor;

<tr>
    <td colspan="2">
        <script id="myEditor"><?=$content?></script>
        <script type="text/javascript">UE.getEditor('myEditor');</script>
    </td>
</tr>

总的下来这个PHP文件有342行代码,写了10小时左右,效率比较低,事先把框架搭好了就会事半功倍呀。

当然还是有些问题没有处理的,比如wp-super-cache开启后发表新文章或者编辑了某一篇文章,在这个PHP程序里面没有作相应静态cache页删除处理,在使用中肯定会遇到其他BUG,还是有待改进的。

完成这个PHP程序,总算了却一桩心事,哈哈。

 



声明: 本文由大超超。原创编译,转载请保留链接: http://www.thinkful.cn/archives/121.html