Schimbarea titlului unei postări prin cod
Sunt începător în dezvoltarea WordPress. Încerc să schimb titlul unei postări individuale. Am folosit funcția get_the_ID()
pentru a obține o postare specifică.
Știu că titlul poate fi schimbat manual de către utilizator, dar vreau să știu dacă acest lucru poate fi făcut prin cod.
Am încercat să adaug o funcție în 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 este transmis prin referință, așa că actualizăm această proprietate în timp real
$post->post_title = $new_title;
}
Așa că în fișierul meu index.php
codul arată astfel
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Link permanent către <?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; ?>
Mulțumesc pentru ajutorul vostru valoros.

Întrebarea ta nu este foarte clară, deoarece, da, este posibil să modifici datele postării programatic, și ești pe drumul cel bun folosind wp_update_post, dar nu sunt sigur ce încearcă să realizeze codul din fișierul index.php al temei tale.
Presupunerea mea este că vrei să poți schimba titlul postării din tema ta, dar nu transmiți nimic funcției afunction() pentru a-l actualiza.
De asemenea, în funcția ta de mai sus, când apelezi mb_convert_case, redefiniți și $new_title ca fiind titlul original al postării, așa că atunci când se execută $post->post_title === $new_title, acesta va fi întotdeauna adevărat.
Pentru a realiza ceea ce cred că încerci să faci, aș face ceva de genul acesta:
În functions.php:
function afunction( $post, $new_title ) {
// dacă new_title nu este definit, returnează
if ( empty ( $new_title ) ) {
return;
}
// asigură formatul Titlu pentru $new_title
$new_title = mb_convert_case( $new_title, MB_CASE_TITLE, "UTF-8" );
// dacă $new_title este definit, dar se potrivește cu titlul curent, returnează
if ( $post->post_title === $new_title ) {
return;
}
// plasează postarea curentă și $new_title într-un array
$post_update = array(
'ID' => $post->ID,
'post_title' => $new_title
);
wp_update_post( $post_update );
}
Actualizat: În fișierul temei tale (index.php, page.php, single.php, etc):
<?php while (have_posts()) : the_post(); ?>
<h2>
<a href="<?php the_permalink() ?>" rel="bookmark" title="Legătură permanentă către <?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 = 'Titlu nou';
afunction( $post, $new_title );
?>
<?php endwhile; ?>
Va trebui să reîmprospătezi pagina cel puțin o dată pentru a vedea schimbarea. Dacă modifici manual fișierul temei, va trebui să reîmprospătezi de două ori. O dată pentru a încărca fișierul modificat, a doua oară pentru a efectua actualizarea. Pentru a evita acest lucru, ar trebui să efectuezi o cerere POST (vezi WordPress HTTP API), sau ceva similar.
Asta nu este ceva ce cineva ar face în mod normal în WordPress. Dar îmi pot imagina unele situații în care ar fi potrivit. În general, o bună practică ar fi să permiți doar utilizatorilor autentificați să efectueze acțiuni care actualizează datele postărilor în baza ta de date.
Notă: Ai grijă specială ca, dacă, ca în exemplul tău index.php, folosești if (have_posts()) : while (have_posts()) : the_post();
să închizi și cu endif;
DUPĂ tot codul tău.
De asemenea, recomand să revezi alte exemple de fișiere de temă din tema implicită și să verifici logica codului tău PHP pentru a identifica probleme.
Sper că aceste informații îți sunt utile.

codul pe care mi l-ai dat funcționează bine, dar titlul nu se afișează.. când mă uit la postări titlul funcționează corect, dar când mă uit pe site nu-mi arată postarea

Pentru că actualizezi titlul în index.php, ar trebui să te asiguri că de fapt vizualizezi postarea corectă. În funcție de tema ta, este posibil să vizualizezi o Pagină în loc de o Postare. Apoi, asigură-te că ai în continuare <?php the_title(); ?> în template. De asemenea, este posibil să fie necesar să dai refresh de două ori pentru a vedea modificarea pe pagină.

da, există funcția the_title() dar nu afișează postarea și titlul

Am actualizat răspunsul meu cu codul complet al temei de utilizat. Funcționează pentru mine, deoarece l-am testat. Dacă încă ai probleme, poate ar fi mai bine să faci mai multe cercetări, iar când ai ajuns într-un punct mort, să postezi o nouă întrebare cu explicații detaliate și cod exemplu complet. Probabil deja ai de gând să faci asta, dar deoarece întrebarea ta originală a primit răspuns, poți considera oportun să marchezi acest răspuns ca 'acceptat'.

Nu sunt un programator foarte bun și nici engleza mea nu este cea mai bună, dar cred că trebuie să introduci un titlu pentru fiecare postare pe care o creezi, așa că
if ( empty ( $post->post_title ) )
return;
este întotdeauna fals
Nu înțeleg de ce ai vrea să schimbi titlul cu codul, nu este util!
Poate ai putea începe cu niște tutoriale despre crearea de teme.. încearcă pe Google
