EEfaq论坛-赚客自留地

 找回密码
 免费注册
楼主: luguokankan

wordpress专业解决问题

  [复制链接]
发表于 2013-5-19 07:56:57 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2013-5-19 09:09:42 | 显示全部楼层
我在post插入了一些随机数据,现在想缓存下这些数据,每60分钟再刷新下,求指点
  1.     $result = array_rand($arry,2);

  2.     foreach ($result as $val) {

  3.     echo $arry["$val"].""; }
复制代码

点评

缓存要单独加入文本缓存类,这个工作会非常复杂,而且你也不方便维护  发表于 2013-5-19 09:20
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-19 09:22:16 | 显示全部楼层
风吹不动 发表于 2013-5-19 09:09
我在post插入了一些随机数据,现在想缓存下这些数据,每60分钟再刷新下,求指点 ...
  1. if ( false === ( $result = get_transient( 'cache_me' ) ) ) {
  2.   
  3.   $result = array_rand($arry,2);
  4.    set_transient( 'cache_me', $result,3600 );
  5. }
  6. foreach ($result as $val) {
  7.         echo $arry["$val"]."";
  8. }
复制代码

点评

你不是把我帖子标题改成专业吗? 得对得起这两个字啊,哈哈  发表于 2013-5-19 10:13

评分

参与人数 1e币 +3 收起 理由
月光飞燕 + 3 你对wp自身的函数真是太熟悉了.

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2013-5-19 10:27:38 | 显示全部楼层

测试不成功,每次都是从新生成结果
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-19 10:43:34 | 显示全部楼层
本帖最后由 luguokankan 于 2013-5-19 10:50 编辑
风吹不动 发表于 2013-5-19 10:27
测试不成功,每次都是从新生成结果

测试代码?

我的测试代码
  1. require_once(__DIR__.'/wp-config.php');
  2. delete_transient( 'cache_me' );
  3. function get_cached_result(){
  4.     $arry = array(1,2,3,4,5,6);
  5.     if ( false === ( $result = get_transient( 'cache_me' ) ) ) {
  6.        $result = array_rand($arry,2);
  7.        set_transient( 'cache_me', $result,3600 );
  8.     }
  9.     return $result;
  10. }

  11. echo '<pre>';
  12. for($i=0;$i<10;$i++){
  13.     $result =get_cached_result();
  14.     print_r($result);
  15. }

  16. exit();
复制代码
output
  1. Array
  2. (
  3.     [0] => 2
  4.     [1] => 3
  5. )
  6. Array
  7. (
  8.     [0] => 2
  9.     [1] => 3
  10. )
  11. Array
  12. (
  13.     [0] => 2
  14.     [1] => 3
  15. )
  16. Array
  17. (
  18.     [0] => 2
  19.     [1] => 3
  20. )
  21. Array
  22. (
  23.     [0] => 2
  24.     [1] => 3
  25. )
  26. Array
  27. (
  28.     [0] => 2
  29.     [1] => 3
  30. )
复制代码
我给的代码肯定是可以的.
问题可能出现在你真正的代码上.
回复 支持 反对

使用道具 举报

发表于 2013-5-19 11:07:59 | 显示全部楼层
luguokankan 发表于 2013-5-19 07:17
这个链接是干嘛的?
自动添加在文章末尾?

说白点就是:
怎样在wp发表文章的界面,用ajax向自己自建的数据表里写入数据(数据都是文本型的,以post_id为关联)。没记错的话,界面就是用哪个meta box。

获取数据表里的数据这个我会,添加在什么地方也会。
回复 支持 反对

使用道具 举报

发表于 2013-5-19 11:22:26 | 显示全部楼层
luguokankan 发表于 2013-5-19 10:43
测试代码?

我的测试代码output我给的代码肯定是可以的.
  1. function get_cache_test(){
  2.     if (false === ( $cache_test = get_transient('cache_test') ) ) {
  3.          $cache_test = date("Y-m-d H:i:s");
  4.          set_transient('cache_test', $cache_test,86400);
  5.     }
  6.         return $cache_test;
  7. }

  8. echo get_cache_test();
复制代码
我的测试代码,每次刷新返回的时间都不一样?

回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-19 13:18:59 | 显示全部楼层
本帖最后由 luguokankan 于 2013-5-19 13:30 编辑
pootor 发表于 2013-5-19 11:07
说白点就是:
怎样在wp发表文章的界面,用ajax向自己自建的数据表里写入数据(数据都是文本型的,以post_ ...

http://codex.wordpress.org/Plugin_API/Action_Reference/wp_ajax_(action)

http://codex.wordpress.org/Function_Reference/add_meta_box

例子

http://devtard.com/how-to-save-post-data-from-a-meta-box-via-ajax
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-19 13:28:15 | 显示全部楼层
风吹不动 发表于 2013-5-19 11:22
我的测试代码,每次刷新返回的时间都不一样?

我测试你的代码还是没问题.
你能不能查下你的数据库?
wp_options 表

SELECT *
FROM `wp_options`
WHERE `option_name` LIKE '%cache_test%'

看看到底有没有cache

回复 支持 反对

使用道具 举报

发表于 2013-5-19 14:53:43 | 显示全部楼层
luguokankan 发表于 2013-5-19 13:28
我测试你的代码还是没问题.
你能不能查下你的数据库?
wp_options 表
  1. SELECT *
  2. FROM  `wp_options`
  3. WHERE  `option_name` LIKE  '%cache_test%'
  4. LIMIT 0 , 30
复制代码
查询数据库之后,有结果
  1.                         10136        _transient_timeout_cache_test        1369021503        no
  2.                         10137        _transient_cache_test        2013-05-19 03:45:03        no
复制代码
但运行测试代码,木调用缓存

第二次查询数据库后再次测试成功调用缓存数据

回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-19 15:11:13 | 显示全部楼层
风吹不动 发表于 2013-5-19 14:53
查询数据库之后,有结果但运行测试代码,木调用缓存

第二次查询数据库后再次测试成功调用缓存数据

有种不详的预感,你用缓存插件了吧??
回复 支持 反对

使用道具 举报

发表于 2013-5-19 15:24:52 | 显示全部楼层
luguokankan 发表于 2013-5-19 15:11
有种不详的预感,你用缓存插件了吧??

使用了DB Cache Reloaded Fix,无法兼容?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-19 15:36:28 | 显示全部楼层
本帖最后由 luguokankan 于 2013-5-19 15:38 编辑
风吹不动 发表于 2013-5-19 15:24
使用了DB Cache Reloaded Fix,无法兼容?

我也喜欢这个插件.
不过你得将_options加到filter上.
很明显,set_transient 是将数据放在wp_options table.

要是主机上有apc 或memcache, 可以安装相应的插件.
set_transient会自动使用它们缓存数据
具体参考
http://codex.wordpress.org/Class_Reference/WP_Object_Cache

评分

参与人数 1e币 +5 收起 理由
月光飞燕 + 5

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2013-5-19 15:41:35 | 显示全部楼层
luguokankan 发表于 2013-5-19 15:36
我也喜欢这个插件.
不过你得将_options加到filter上.
很明显,set_transient 是将数据放在wp_op ...

感谢啊,终于搞明白了

回复 支持 反对

使用道具 举报

发表于 2013-5-19 18:56:45 | 显示全部楼层
luguokankan 发表于 2013-5-19 13:18
http://codex.wordpress.org/Plugin_API/Action_Reference/wp_ajax_(action)

http://codex.wordpress.org ...

研究下,非常感谢。
回复 支持 反对

使用道具 举报

发表于 2013-5-19 19:08:09 | 显示全部楼层
本帖最后由 Imnostal 于 2013-5-19 19:10 编辑

准备用wordpress建个资源站!请问http://www.itopdog.cn/audio-video/editor/videocutter.html这个页面 1.jpg
这个表格添加到后台如何实现呀?就是有个模板像软件版本,软件语言什么都是固定的!我只需要添加自己需要的!用插件能实现吗?

2.jpg
这个导航,点击相应的链接,比如下载地址直接跳转到下载地址那里!这个如何实现,能用插件吗?
小弟是php菜鸟,多谢楼主解答!


回复 支持 反对

使用道具 举报

发表于 2013-5-19 19:09:54 | 显示全部楼层
再问个比较复杂的:
怎样通过下拉列表框实现访客文章排序?按自定义字段排,比如:浏览量,评分等。只需在首页,存档页排,如果搜索页可以的话也可以。
目前是通过链接参数加文章预过滤(pre_get_posts)实现的,比如:xxx.com/?sort=views
不想加参数 ?sort=views ,但如果不加的话,只能对当前页面的文章排序,就是不能分页!!非常头痛。这个功能可以做成插件了。
估计不好实现,ajax应该可以。
效果参考 amazon的排序。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-19 20:00:14 | 显示全部楼层
本帖最后由 luguokankan 于 2013-5-19 20:18 编辑

象amazon那样子的,我可以给个思路.
保留?sort=xxx
以twentytweleve默认主题为例, 内容包括pagination都是在id为primary的div里.
  1.     jQuery(document).ready(function($){
  2.       $("#dropdown").change(function() {//下拉列表触发
  3.         $('#primary').load($(this).data('href') + ' #primary');
  4.       });
  5.     });
复制代码
  1. <select>
  2.     <option href="http://www.test.com/?sort=views">Views</option>
  3.     </select>
复制代码
啊,上面是ajax动态加载内容的,你看看下面就行.
------
至于pagination的话,自己写, 参考这个
http://codex.wordpress.org/Function_Reference/paginate_links
参数中的format
$sort = $_GET['sort']?$_GET['sort']:'views';
'format' => '/page/%#%?sort='.$sort

假设sort自定义字段保存在post_meta

你可以在preg_get_post,添加meta_key和orderby相关参数

http://codex.wordpress.org/Class ... om_Field_Parameters
如$query->set( 'meta_key', 'views' );
http://codex.wordpress.org/Class ... _Orderby_Parameters
如$query->set( 'order', 'meta_value_num' );

代码未经测试,但思路已经摆在这里了.

评分

参与人数 1e币 +3 收起 理由
月光飞燕 + 3

查看全部评分

回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-19 20:02:58 | 显示全部楼层
Imnostal 发表于 2013-5-19 19:08
准备用wordpress建个资源站!请问http://www.itopdog.cn/audio-video/editor/videocutter.html这个页面
这 ...

老实说主题的东西,我不擅长.
不过看你这个要求, 主题必须定制.
需要很多meta boxes

点评

那我在研究研究  发表于 2013-5-21 00:46
回复 支持 反对

使用道具 举报

发表于 2013-5-19 20:13:15 | 显示全部楼层
本帖最后由 pootor 于 2013-5-19 20:16 编辑
luguokankan 发表于 2013-5-19 20:00
你的问题是不是不会搞包含sort参数的 pagination?
加sort参数的分页可以搞定。

不能搞定:不加参数,可以实现用下拉列表实现访客排序,但是排序不能分页,访问第二页排序就失去作用了。能否解决分页也能排序(不加参数)?下面的代码可以实现排序,但不能分页。
  1. <?php
  2.   $order = "&order=DESC";
  3.   if ($_POST['select'] == 'tag') { $order = "&tag=mytag";  }
  4.   if ($_POST['select'] == 'title') { $order = "&order=ASC&orderby=title";  }
  5.   if ($_POST['select'] == 'newest') { $order = "&order=DESC"; }
  6.   if ($_POST['select'] == 'oldest') { $order = "&order=ASC";  }
  7.   if ($_POST['select'] == 'mcommented') { $order = "&order=DESC&orderby=comment_count";  }
  8.   if ($_POST['select'] == 'lcommented') { $order = "&order=ASC&orderby=comment_count";  }
  9. ?>


  10. <form method="post" id="order">
  11.   Sort reviews by:
  12.   <select name="select" onchange='this.form.submit()'>
  13.     <option value="tag"<?php selected( $_POST['select'],'tag', 1 ); ?>>Tag</option>
  14.     <option value="title"<?php selected( $_POST['select'],'title', 1 ); ?>>Title</option>
  15.     <option value="newest"<?php selected( $_POST['select'],'newest', 1 ); ?>>Newest</option>
  16.     <option value="oldest"<?php selected( $_POST['select'], 'oldest', 1 ); ?>>Oldest</option>
  17.     <option value="mcommented"<?php selected( $_POST['select'],'mcommented', 1 ); ?>>Most commented</option>
  18.     <option value="lcommented"<?php selected( $_POST['select'],'lcommented' , 1 ); ?>>least commented</option>
  19.   </select>
  20. </form>

  21. <?php query_posts($query_string . $order); ?>
  22. <?php if ( have_posts() ) : ?>
  23. <?php while (have_posts()) : the_post(); ?>
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

QQ|联系我们|Archiver|手机版|小黑屋|EEfaq论坛

GMT+8, 2024-4-29 05:17

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表