获取帖子(Fetching Posts) WordPress提供从数据库中获取任何类型的帖子(post)的方法。...这可能会导致不一致,特别是如果我们在代码中使用查询相关的过滤器,因为你在页面中不期望的帖子可能会被该函数返回。 使用WP_Query类 在我看来,这是从数据库中检索帖子的最佳方式。...WordPress允许我们将-1表示为该参数的合理值,在这种情况下,系统将尝试获取满足定义条件的所有帖子。 这不是一个好的做法,即使我们确信我们只会得到一些结果作为回应。...有时我们要从查询中排除某些帖子。WordPress提供了一个非常直接的方法:使用post__not_in参数。...: NULL; 正如你所看到的,这种方法很简单,但并不是最佳的。它将执行一个数据库查询,试图找到一个具有特定元键(meta key)的帖子。
该漏洞可能允许攻击者暴露存储在连接数据库中的数据。此漏洞最近被解决为 CVE-2022-21661 ( ZDI-22-220 )。...首先,这是一个演示该漏洞的快速视频: 漏洞 该漏洞发生在 WordPress Query ( WP_Query ) 类中。WP_Query对象用于对 WordPress 数据库执行自定义查询。...插件和主题使用此对象来创建他们的自定义帖子显示。 当插件使用易受攻击的类时,就会出现该漏洞。一个这样的插件是Elementor Custom Skin 。...get_sql_for_clause调用clean_query来验证用户提供的字符串。但是,如果分类参数为空且字段参数的值为字符串“term_taxonomy_id” ,则该方法无法验证术语参数。...今年早些时候的情况就是这样,当时 Fancy Product Designer 插件中的一个错误被报告为受到主动攻击。
我之前的「WordPress 文章查询教程6:如何使用排序相关的参数」中详细介绍了文章查询的排序参数,其中介绍可以通过评论数进行排序: $query = new WP_Query( array(...'orderby' => 'comment_count' ) ); 但是需求总是不停的变化,现在又有了新需求,获取最新被评论的文章列表,意思就是某篇文章刚被评论,它就排到最前面,在某些社交需求的网站可能需要用到...但是使用 SQL 来实现可能就会造成 API 不一致的问题,无法直接使用 WP_Query 进行各种操作,所以最好是通过 posts_clauses 接口实现让 WP_Query 排序参数支持 comment_date...$order}"; } return $clauses; }, 10, 2); 上面的代码简单解释一下,就是通过 posts_clauses 接口实现文章表和评论表连表,然后通过评论时间进行排序获取最新被评论的文章列表...当然你也可以不需要了解和使用上面的代码,因为 WPJAM Basic 已经整合,你只需要知道最后可以通过下面简单的方式就能够获取最新被评论的文章列表: $query = new WP_Query( array
year (string) 四位数的年份,默认是空。 month (string) 月份数字(从 1 到 12)默认是12。...year (string) 四位数的年份,默认是空。 month (string) 月份数字(从 1 到 12)默认是1。 day (string) 一个月中的第几天(从 1 到 31),默认是1。...获取2012年12月12号的文章: $query = new WP_Query( 'year=2012&monthnum=12&day=12' ); 使用 date_query 的话: $args =...( $args ); 获取这个星期的文章: $week = date( 'W' ); $year = date( 'Y' ); $query = new WP_Query( 'year=' ....参数被设置为 true,该日期也不会包含在查询中。
/** * 文章类型 & 状态参数 - 显示某些文章类型里面的文章 */ 'post_type' => array( //(字符串/ 数组) - 文章类型,根据文章类型获取文章,默认为'post'...'post_type' => 'any', // - 获取所有文章类型里面的文章,除了版本和文章类型参数'exclude_from_search'设置为true的文章类型 'post_status' =...> 'any', // - 获取处于所有文章状态的文章,除了版本和文章类型参数'exclude_from_search'设置为true的文章类型 /** * 分页参数 */ 'posts_per_page...> 调用单篇文章 调用id为36的单篇文章的新建查询如下 $args = array( 'p'=>'36' ); $query = new WP_Query( $args ); 等同于...调用指定分类的文章 $query = new WP_Query( 'page_id=7' );//指定page页面 调用多篇文章 调用id为34、32、30的文章 $args = array(
/** * 文章类型 & 状态参数 - 显示某些文章类型里面的文章 */ 'post_type' => array( //(字符串/ 数组) - 文章类型,根据文章类型获取文章,默认为'post'...'post_type' => 'any', // - 获取所有文章类型里面的文章,除了版本和文章类型参数'exclude_from_search'设置为true的文章类型 'post_status'...=> 'any', // - 获取处于所有文章状态的文章,除了版本和文章类型参数'exclude_from_search'设置为true的文章类型 /** * 分页参数 */ 'posts_per_page...> 调用单篇文章 调用id为10的单篇文章的新建查询如下: $args = array( 'p'=>'10' ); $query = new WP_Query( $args ); 等同于 $query...$query = new WP_Query( 'page_id=5' );//指定page页面 调用多篇文章 调用id为14、12、20的文章: $args = array( 'post__in'
阅读该函数的代码会发现该函数的工作是为SQL查询中的条件创建子句,具体而言,它的工作是处理接收到的数据,将这些数据组合成SQL查询中的条件。将其返回给父函数。...');为避免 if,query['taxonomy']需要为空或is_taxonomy_hierarchical的值返回false。...(这里的比较是使用==,使用的是弱比较),在某些情况下这个错误可以用来随意创建条件句)。...总而言之,要产生 SQL 注入,必须满足两个条件: (1)$query['field'] 是 term_taxonomy_id (2)query['taxonomy'] 为空或 is_taxonomy_hierarchical...当您想查询数据库时,插件/主题将调用 WP_Query 类,从源代码中了解错误的方法是使用 WP_Query(data) 和 data 是您可以控制的。
如果你希望在主循环外另外生成循环,应该新建独立的 WP_Query对象,用这些对象生成循环。...> 当然,使用哪种方法完全由个人习惯决定,不过我认为用数组更为方便,原因如下: 便于阅读,可以利用if语句更轻松地给数组添加条件,以动态生成查询一些查询参数(某些使用频率较低的参数,如分类参数和标签参数...允许插件将DISTINCTROW语句加入查询,该查询可返回日志数组 posts_groupby 应用于查询的GROUP BY语句,该语句可返回日志数组(通常情况下该数组为空) posts_join_paged...但有时如果你想用数字型meta值来为一次查询排序,却发现meta值是字符串字段类型的(即,查询的顺序是1, 10, 11, 2, 23, 3,而你希望是按数字大小来排序:1,2,3,10,11,23)...不显示某些文章(隐藏重复内容) 最后这个方法曾经在WebLogToolsCollection上出现过。 其原理是当用户在某一个页面上使用多个WordPress循环时,用代码阻止重复内容被链接。
前面罗列过 WP_Query 的所有参数,今天研究 WP_Query 的缓存,把所有相关的缓存参数都翻了一遍,做一下简单笔记。...WP_Query 主要用4个用于缓存相关的参数和使用到函数有: cache_results 是否缓存查询的文章信息。...post_ids(如果开启了 Memcached,这里就可以自动实现返回为空,就会大大减少 SQL 请求),然后使用一条 IN 查询获取这些 post_ids 的内容,最后再使用 update_post_caches...将新获取的 posts 缓存起来,然后并且一次性求获取所有相关的 post_term 和 post_meta。...如果为 true 的话,WP_Query 会把列表页所有的 term_ids 临时存储下来,在当前页第一次使用 get_term_meta 函数的时候,把 term_ids 的所有 term_meta
WP_Query 是 WordPress 中最重要的 class,几乎每个页面都是用它来获取文章,但是它最大的问题是,对文章进行查询的时候是直接到数据库查询的,结果没有被缓存起来,所以真正实现站点的 0SQL...比如使用 wp_insert_post 函数将文章添加到数据库,这些函数会自动去清理缓存,这样下次使用 WP_Query 获取文章时候,就能获取是包含了新增的或者更新之后的数据。...如何禁用缓存 值得注意的是,在默认情况下,WP_Query 的所有数据库查询都将被缓存,如果想不缓存,只需将 cache_results 参数设置为 false 即可: $query = new WP_Query...WP_Query 初始化所有作者数据 在 6.1 之前,主循环会同时加载作者信息,所以具有多个作者的站点需要执行多次数据库查询来分别获取作者的信息,现在 WordPress 6.1 引入了一个新函数 update_post_author_caches...,并且 WP_Query 也增加了一个新的参数 update_menu_item_cache,如果它被设置为 true,则会调用 update_menu_item_cache 函数仅仅通过两条 SQL
在wordpress提供的类中,发现WP提供的查询DB的类中有SQL Injection错误:WP_Query 分析 在 5.8.3 版本中,wordpress 已经修复了这个错误,比较提交更改可以在处理变量之前...阅读该函数的代码会发现该函数的工作是为 SQL 查询中的条件创建子句,具体而言,它的工作是处理接收到的数据,将这些数据组合成 SQL 查询中的条件。将其返回给父函数。...' ); 为避免下降if,它$query['taxonomy']需要为空或is_taxonomy_hierarchical返回 false的值。...(这里的比较是使用==了Loose comparisons的漏洞,在某些情况下这个错误可以用来随意创建一个条件句) 退出函数后,码流回到原位会调用clean_query函数get_sql_for_clause...WP_Query当您要查询数据库时,插件/主题将调用该类,从源代码中了解错误的方法是在您使用它时,WP_Query(data)并且 data 是您可以控制的。
meta_query 还包含一个或者多个具有以下键值的数组: key (string) – 自定义字段的 key。 value (string|array) – 自定义字段的 value。...' ) ); 获取自定义字段的 value 是 'blue',而 key 则任意值都可的文章: $query = new WP_Query( array( 'meta_value' => 'blue'...' => 'page' ); $query = new WP_Query( $args ); 获取自定义字段的 key 是 'color' 并且 value 是 'blue' 的文章: $args =...=' ); $query = new WP_Query( $args ); 获取自定义字段 key 为设定日期且 value 为现在的文章,就是显示还未过期的活动: $args = array(...( $args ); 获取其中自定义字段键为“价格”,小于或等于 22 的商品: $args = array( 'meta_key' => 'price', 'meta_value
第六讲关于排序相关的参数,排序相关的参数就是 order 和 orderby 两个参数,但是值比较多比较多: 首先是 order 参数,数据类型为:(string | array),用于指定 “orderby...降序,从最高值到最低值 (3, 2, 1; c, b, a) 然后是 orderby 参数,数据类型为:(string | array),按参数对检索到的文章进行排序。...常用于页面(排序字段在页面编辑页面的「页面属性」框中),也可用于具有不同 menu_order 值的任何文章类型(默认值都是 0)。...args ); 获取按照价格自定义字段排序的商品: $args = array( 'post_type' => 'product', 'orderby' => 'meta_value_num...( $args ); 获取 my_custom_post_type 的文章,按照数字自定义字段 age 排序,并通过 meta_query 过滤数据只显示 age 为:3-4 的数据 $args = array
php print($wp_query); ?...阅读设置:为默认设置的时候 查询出最新的文章 自定义: [is_home] => 1 ,[is_page] => 1 阅读设置:为自定义页面的时候 查询出来是设置的页面 11.搜索页的查询 [is_serch...默认查询的总结 默认查询: $wp_query -> posts -> post 被查询对象:(wp_query查询出来的) get_queried_object() get_queried_object_id...② $parents 字符串值,默认为空 指定父分类的显示方式,可选值如下: 空值:不输出父分类; multiple:父分类和子分类都是单独的链接,但处于同一个li元素中; single:不输出父分类链接...② $sep 字符串值,默认值:, 在每个标签链接 之间 显示的文本。 ③ $after 字符串值,默认为空 在标签链接 后 显示的文本。
-常用设置,设置为除“朴素”外的其他选项(建议选数字型),再去请求就可以拿到数据了。...函数参数没设置默认值,接口调用会报错获取用户信息时定义了一个格式化用户信息的方法,第二个参数 $t 开始没设置默认值,调用时不需要的就不会传,但是当方法里用到 $t 去判断为假时接口会直接崩了,自己设置一个默认值就好了...WP_Query 和 WP_Comment_Query 中的 no_found_rows 参数WP_Query 和 WP_Comment_Query 这两个查询类里,其实都有这个参数no_found_rows...如果 no_found_rows 为 false, 最大页 max_num_pages、总条数found_posts/found_comments 就不会去被计算,我们直接获取就都是0。...hide_empty 为 true,wp_count_terms 方法里也要传进去 hide_empty 为 true,否则统计出来的总数不对。
普通用户(用户注册默认是普通用户) 1 - 超级管理员:具有删除帖子、访问数据统计界面的权限 2 - 版主:具有置顶、加精帖子权限 status:用户状态 0 - 未激活(默认):用户点击注册后未点击邮箱中的激活链接进行验证...未激活的用户同样无法正常使用某些功能比如发表帖子等 1 - 已激活:用户点击邮箱中的激活链接进行验证成功,就会将状态从未激活改成已激活 activation_code:激活码。...解释一下各个字段的含义: id:帖子的唯一标识 user_id:发表该帖子的用户的 id title:帖子标题 content:帖子内容 type:帖子类型 0 - 普通帖子(默认) 1 - 置顶帖子...status:帖子状态 0 - 正常(默认) 1 - 精华:为帖子加精可以使其在热度计算中得到一定的加分 2 - 拉黑:管理员删除帖子后,就将这个帖子的状态设置为拉黑 create_time:帖子发表时间...可能会有同学会问啥不把点赞数量也缓存到帖子表中,因为点赞数量是存在 Redis 中的,获取点赞数量咱连数据库都不用进的,还费劲在这存一份干啥) score:热度 / 分数(用于按照热度排行帖子) ?
Http方法的幂等性指一次和多次请求某一个资源应该具有相同的副作用。...一种典型的情况是withdraw请求已经被服务器端正确处理,但服务器端的返回结果由于网络等原因被掉丢了,导致客户端无法得知处理结果。...和分布式事务相比,幂等设计的优势在于它的轻量级,容易适应异构环境,以及性能和可用性方面。在某些性能要求比较高的应用,幂等设计往往是唯一的选择。...比如:DELETE http://www.forum.com/article/4231,调用一次和N次对系统产生的副作用是相同的,即删掉id为4231的帖子;因此,调用者可以多次调用或刷新页面而不必担心引起错误...比如:PUThttp://www.forum/articles/4231的语义是创建或更新ID为4231的帖子。对同一URI进行多次PUT的副作用和一次PUT是相同的;因此,PUT方法具有幂等性。
,而想要更好的采集就需要获取到文章列表,这下子就很好做了。...简单的来科普一下,采集时大多数人都是根据文章栏目和列表获取采集文章的 URL 链接,所以最重要的就是翻页,这也是几乎所有网站暴露网站所有文章的一种方式,那么最简单的解决办法就是让网站列表不能无止境的翻页...,这样就算能采集几十篇的内容,也无法把整站的内容都采集走了。...别看上面代码行数多,其实 404 页面那整段可以直接使用跳转到首页,甚至直接使用 die 结束,我这里分享只是为了漂亮的结束为 404 页面而已。...让采集获取不到网站完整的列表链接基本就能防止很大一部分采集。
$post, $wp_query; // 默认值 $ds = get_option('description_announce')!...){ $keywords[] = $cat->name; } } //获取...$description = get_post_meta($post->ID, 'description', true); } //自定义域为空...$description) ){ $description = get_the_excerpt(); } //依然为空...80行的117为普通文章页面的截取字数。 此代码扒自PhilNa2主题,超级强大。自己稍微修改,完善了些。
【修复】修复版权单页显示为空的问题 17.【修复】修复分享积分增加的部分问题 18.【修复】修复分销商订单不显示的问题 19.【修复】修复收藏页面销售数量为空的问题 20....【修复】优惠券删除后用户中心为空的问题 21.【重写】餐饮页面重写,增加加购圆点抛物线动画 2018.04.26 版本号:6.8.76 1....【修复】修复后台领取优惠券获取手机号无法设置的问题 2018.04.25 版本号:6.8.75 1.【增加】增加一键获取头像和昵称页面,响应腾讯规则 2....【修复】修复多规格产品支付后余额变为负数的问题 17.【修复】修复分销中心某些数值为NULL的问题 18.【修复】修复多门店页面城市切换显示错误的问题 19....2、修复报名列表为空 3、优化核销码样式 4、新增报名人数 5、新增浏览量 6、新增报名倒计时时间 7、优化首页报名中状态样式 8、修复后台样式错位 9、修复后台会员无法搜索 2018.04.17 版本号
领取专属 10元无门槛券
手把手带您无忧上云