当我插入一篇帖子时,我发现在insert\\u post中有一个对wp\\u unique\\u post\\u slug的缓慢调用(在我用来测试的数据库中有155000篇帖子-live会有更多)。由于我不认为一个slug对我所做的事情很重要(浏览我们网站的人可能永远不会看到这种帖子类型的单一页面视图),我能做些什么来加快通话速度或(更好的)消除通话。
查看insert\\u post的代码,我看不到不修改core的方法(这是我不愿意做的)。我使用的代码是:
$post = array(
\'post_title\' => \'post_title\',
\'post_type\' => \'character\',
\'post_status\' => \'publish\'
);
$post_id = wp_insert_post( $post );
编辑:因为人们似乎遗漏了我在这个问题中所写的信息。这是我能说清楚的问题。
问题:性能缓慢。我已经查到了这个函数wp_unique_post_slug
从内部调用wp_insert_post
调用wp_insert_post
:
$post = array(
\'post_title\' => \'post_title\',
\'post_type\' => \'character\',
\'post_status\' => \'publish\'
);
$post_id = wp_insert_post( $post );
(是的,它们都是字符串,而不是分配给$post的变量)
其他信息:
当这些帖子呈现给用户时,帖子状态需要为“发布”(虽然不是以标准的WordPress方式)。
我可以通过编辑核心来修复它,但这是一个BAD 这个想法有很多原因。
slug并不重要,因为用户不应该访问此内容类型的单个页面视图。
SO网友:kaiser
if (
in_array( $post_status,
array( \'draft\', \'pending\', \'auto-draft\' )
)
OR
(
\'inherit\' == $post_status
AND \'revision\' == $post_type
)
)
return $slug;
这意味着没有任何计算、查询或处理
ifpost状态为draft、pending或auto draft,或
post状态为inherit
以及a类岗位revision
正如您从wp_insert_post()
where wp_unique_post_slug()
调用时,它会像您一样传递状态。
$post_name = wp_unique_post_slug(
$post_name,
$post_ID,
$post_status,
$post_type,
$post_parent
);
如果帖子类型不是公共的,但只能从管理UI中看到,那么您只需忽略帖子状态,将其设置为draft(草稿)、pending(挂起)或其他(插入帖子时)即可,并且不会进行任何处理。
每次尝试都会失败,因为$wpdb->get_var()
没有筛选器。
也许解决方案
您仍然可以使用下拉菜单。替换
$wpdb
类/对象。只需复制
~/wp-includes/wp-db.php
放入名为
db.php
并将其放入
~/wp-content
(或任何您命名的)文件夹。
然后修改$wpdb->get_var()
在从上下文调用时中止wp_unique_post_slug()
. 那就取决于你的创造力和技能,如果你能更快地放弃它的话。
请记住,每次有核心更新时,都必须更新该文件。
注意:如果您离开post_status
参数为空,自动赋值draft
.用于post
帖子类型,当没有分配类别时,它会自动分配默认类别。但前提是帖子状态不是auto-draft
.如果post_date_gmt
为空,并且您正在添加草稿,则该值将自动设置为\'0000-00-00 00:00:00\'
.如果post_name
(标题)为空,状态为draft
, auto-draft
或pending
, 那么标题将不会被清除不要为现在或更早设置发布日期,因为状态将转换为“未来”(如果状态仍然为“发布”)