你可能会问我为什么这么做?我正在为一家企业开发一个网站,其中的画廊项目都是帖子。这些帖子是通过自定义字段和类别选择填充的,没有其他内容。
对于每个项目,可能有标题/内容,也可能没有,这取决于所讨论的项目,这完全取决于客户。他们是填充他们投资组合的人,而不是我。我只是在建立一个系统,让他们可以轻松地发布他们想要的任何东西。
我意识到WordPress对于没有标题的帖子可能会有一些问题,这就是为什么我在functions.php
) 一个函数,用于在没有属性的情况下自动设置帖子标题。这篇文章的自动标题将永远不会显示在网站上,因为我会查找它,如果它在那里,请忽略它,否则,请显示文章的属性标题。
其功能是:
add_action(\'publish_post\', \'insert_automatic_post_title\', 10, 2);
function insert_automatic_post_title($postID, $post) {
if($post->post_title === \'\') {
$post->post_title = \'[\'.get_the_date(\'d/m/Y @ H:i:s\').\']\';
if($post->post_name == $postID) {
$post->post_name = sanitize_title($post->post_title);
}
$result = wp_update_post($post);
}
}
唯一的问题是,如果标题是空的,内容也是空的(已经定义了一些自定义字段),那么上面的函数将永远不会被调用,帖子也不会被发布,它将保持在草稿状态。
我能想到的唯一解决方案是创建一些短代码,如[empty_post]
当客户不希望将标题/内容归属于帖子时,请客户在帖子内容上设置该选项。这个短代码可以打印出如下内容<!-- EMPTY POST -->
甚至什么都没有。事实上,在帖子内容中有一些东西,上面的函数被调用,一个自动标题被设置,帖子被发布。
但我正在寻找一种方法,使客户不需要比所需的更麻烦(即:在帖子内容中插入一个短代码),我希望它尽可能简单。当然不会弄乱WordPress的源代码。
有人能想出另一种操作/过滤器的方法吗?
最合适的回答,由SO网友:Jan Fabry 整理而成
如果帖子内容、标题和摘录为空WordPress will prevent the insertion of the post. 您可以通过先过滤输入数组,将空值设置为其他值,然后再将这些值重置为空字符串来欺骗WordPress。这将绕过标准检查。
add_filter(\'pre_post_title\', \'wpse28021_mask_empty\');
add_filter(\'pre_post_content\', \'wpse28021_mask_empty\');
function wpse28021_mask_empty($value)
{
if ( empty($value) ) {
return \' \';
}
return $value;
}
add_filter(\'wp_insert_post_data\', \'wpse28021_unmask_empty\');
function wpse28021_unmask_empty($data)
{
if ( \' \' == $data[\'post_title\'] ) {
$data[\'post_title\'] = \'\';
}
if ( \' \' == $data[\'post_content\'] ) {
$data[\'post_content\'] = \'\';
}
return $data;
}