使用代码更改帖子的标题

时间:2014-11-19 作者:Avinash Babu

事实上,我对wordpress开发还很陌生。我只是想更改个人帖子的标题。。所以我使用了这个函数get_the_ID() 获取特定帖子。

我知道标题的名称可以由用户手动更改,但我只想知道这是否可以通过代码完成。

所以我尝试在中添加一个函数functions.php

function afunction( $post )
{
if ( empty ( $post->post_title ) )
    return;

$new_title = mb_convert_case( $post->post_title, MB_CASE_TITLE, "UTF-8" );

if ( $post->post_title === $new_title )
    return;

wp_update_post(
    array (
        \'ID\'         => $post->ID,
        \'post_title\' => $new_title
    )
);

// $post is passed by reference, so we update this property in real time
$post->post_title = $new_title;
}
所以在我的index.php 代码如下所示

<?php if (have_posts()) : 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>
                            <br><br>
<?php  echo afunction( $post ) ?>
                    <?php
                    $hon = array(
                        \'post_title\' => \'asad\'
                        );
                 $name = get_the_ID();
                 if($name  == 19) {
                  $post->title = \'sfsdf\';
                  echo $post->title;
                 }
                 ?>



            <?php endwhile; ?>
谢谢你的宝贵帮助。

2 个回复
最合适的回答,由SO网友:pwbred 整理而成

您的问题并不十分清楚,因为可以通过编程更改帖子数据,而且您使用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请求(参见WordPressHTTP API), 或者类似的东西。

这不是人们通常会用WordPress做的事情。但我可以想象一些合适的情况。通常,一个好的做法是只允许登录用户执行更新数据库中post数据的操作。

Note: 请特别注意,如您的示例索引中所示。php,您正在使用if (have_posts()) : while (have_posts()) : the_post(); 你也在用endif; 完成所有代码之后。

我还建议您查看来自默认主题的其他主题文件示例,并注意查看PHP的逻辑以检查问题。

所以我希望这是有用的。

SO网友:apetto

我不是一个很好的程序员,甚至我的英语也不是最好的,但我认为你必须为你创建的每个帖子输入一个标题,所以

  if ( empty ( $post->post_title ) )
    return;
总是错误的

我不明白你为什么要用代码更改标题,这没有用!

也许你可以从一些关于主题创建的教程开始。。尝试google

结束

相关推荐

Responsive Admin Themes

我在看这个管理主题的示例(http://themepixels.com/main/themes/demo/webpage/shamcey/dashboard.html). 至于标签为“Navigation”的左侧管理栏,有没有一种方法可以在不使用插件的情况下实现这种类型的左侧仪表板管理菜单?我想用css、js或Jquery来实现这一点,任何处理编码的东西都可以。