Изменение заголовка записи с помощью кода
Я новичок в разработке 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 передается по ссылке, поэтому мы обновляем это свойство в реальном времени
$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="Постоянная ссылка на <?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; ?>
Спасибо за вашу ценную помощь.

Ваш вопрос не совсем ясен, потому что, да, действительно можно программно изменять данные записи, и вы на правильном пути, используя wp_update_post, но я не уверен, что именно пытается достичь код в файле index.php вашей темы.
Мое предположение, что вы хотите иметь возможность изменять заголовок записи из вашей темы, но вы не передаете никаких данных в функцию afunction() для его обновления.
Кроме того, в вашей функции выше, когда вы вызываете mb_convert_case, вы также переопределяете $new_title как оригинальный заголовок записи, поэтому когда выполняется условие $post->post_title === $new_title, оно всегда возвращает true.
Чтобы достичь того, что, как я думаю, вы пытаетесь сделать, я бы сделал так:
В functions.php:
function afunction( $post, $new_title ) {
// если $new_title не определен, возвращаем
if ( empty ( $new_title ) ) {
return;
}
// преобразуем $new_title в заглавные буквы
$new_title = mb_convert_case( $new_title, MB_CASE_TITLE, "UTF-8" );
// если $new_title определен, но совпадает с текущим заголовком, возвращаем
if ( $post->post_title === $new_title ) {
return;
}
// помещаем текущую запись и $new_title в массив
$post_update = array(
'ID' => $post->ID,
'post_title' => $new_title
);
wp_update_post( $post_update );
}
Обновлено: В файле вашей темы (index.php, page.php, single.php и т.д.):
<?php while (have_posts()) : the_post(); ?>
<h2>
<a href="<?php the_permalink() ?>" rel="bookmark" title="Постоянная ссылка на <?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 = 'Новый заголовок';
afunction( $post, $new_title );
?>
<?php endwhile; ?>
Вам нужно будет обновить страницу как минимум один раз, чтобы увидеть изменения. Если вы вручную измените файл темы, вам нужно будет обновить дважды. Первый раз для загрузки измененного файла, второй раз для выполнения обновления. Чтобы избежать этого, вам нужно выполнить POST-запрос (см. HTTP API WordPress), или что-то в этом роде.
Это не то, что обычно делают в WordPress. Но я могу представить некоторые ситуации, когда это было бы уместно. Как правило, хорошей практикой будет разрешать изменять данные записей в базе данных только авторизованным пользователям.
Примечание: Будьте особенно внимательны, если, как в вашем примере index.php, вы используете if (have_posts()) : while (have_posts()) : the_post();
, чтобы также закрыть это с помощью endif;
ПОСЛЕ всего вашего кода.
Я также рекомендую вам изучить другие примеры файлов тем из стандартной темы и тщательно проверить логику вашего PHP-кода на наличие проблем.
Надеюсь, это будет полезно.

предоставленный вами код работает нормально, но заголовок не отображается... когда я смотрю записи, заголовок отображается правильно, но на самом сайте записи не видны

Поскольку вы обновляете заголовок в index.php, убедитесь, что вы действительно просматриваете нужную запись. В зависимости от вашей темы, вы можете просматривать Страницу вместо Записи. Также убедитесь, что у вас остался тег <?php the_title(); ?> в вашем шаблоне. Возможно, вам потребуется обновить страницу дважды, чтобы увидеть изменения.

да, есть функция the_title(), но она не отображает пост и заголовок

Я обновил свой ответ полным кодом темы для использования. У меня он работает, так как я его протестировал. Если у вас всё ещё есть проблемы, возможно, лучше провести дополнительное исследование, и когда вы упрётесь в тупик, задать новый вопрос с подробным объяснением и полным примером кода. Вероятно, вы уже собираетесь это сделать, но так как ваш исходный вопрос был отвечен, вы можете счесть уместным отметить это как 'принятый ответ'.

Я не очень хороший программист, и даже мой английский не самый лучший, но я считаю, что вы должны вводить заголовок для каждой создаваемой записи, поэтому
if ( empty ( $post->post_title ) )
return;
всегда будет ложным.
Я не понимаю, зачем вам изменять заголовок с помощью кода, это не полезно!
Может быть, вам стоит начать с каких-нибудь уроков по созданию тем... Попробуйте Google
