您的问题并不十分清楚,因为可以通过编程更改帖子数据,而且您使用wp\\u update\\u post的方法是正确的,但我不确定主题索引中的代码是什么。php文件正在尝试实现。
我的假设是,您希望能够更改主题的帖子标题,但您没有将任何内容传递给函数()来更新它。
此外,在上面的函数中,当您调用mb\\u convert\\u case时,您还将$new\\u title重新定义为原始帖子标题,因此当执行$post->post\\u title====$new\\u title时,它始终等于true。
为了实现我认为您正在努力实现的目标,我会这样做:
在函数中。php:
function afunction( $post, $new_title ) {
// if new_title isn\'t defined, return
if ( empty ( $new_title ) ) {
return;
}
// ensure title case of $new_title
$new_title = mb_convert_case( $new_title, MB_CASE_TITLE, "UTF-8" );
// if $new_title is defined, but it matches the current title, return
if ( $post->post_title === $new_title ) {
return;
}
// place the current post and $new_title into array
$post_update = array(
\'ID\' => $post->ID,
\'post_title\' => $new_title
);
wp_update_post( $post_update );
}
Updated: 在主题文件(index.php、page.php、single.php等)中:
<?php while (have_posts()) : the_post(); ?>
<h2>
<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><?php the_title(); ?></a>
</h2>
<div class="single-post-content">
<?php the_content(); ?>
</div>
<?php
$current_id = get_the_id();
$post = get_post($current_id);
$new_title = \'New Title\';
afunction( $post, $new_title );
?>
<?php endwhile; ?>
您必须至少刷新一次才能看到更改。如果手动更改主题文件,则必须刷新两次。一次加载更改的文件,第二次执行更新。为了避免这种情况,您需要执行POST请求(参见WordPress
HTTP API), 或者类似的东西。
这不是人们通常会用WordPress做的事情。但我可以想象一些合适的情况。通常,一个好的做法是只允许登录用户执行更新数据库中post数据的操作。
Note: 请特别注意,如您的示例索引中所示。php,您正在使用if (have_posts()) : while (have_posts()) : the_post();
你也在用endif;
完成所有代码之后。
我还建议您查看来自默认主题的其他主题文件示例,并注意查看PHP的逻辑以检查问题。
所以我希望这是有用的。