Modificare il titolo di un post con il codice

19 nov 2014, 19:19:44
Visualizzazioni: 23K
Voti: 6

Sono nuovo nello sviluppo WordPress. Sto cercando di modificare il titolo di un singolo post. Ho utilizzato la funzione get_the_ID() per recuperare uno specifico post.

So che il titolo può essere modificato manualmente da un utente, ma vorrei sapere se questo può essere fatto tramite codice.

Ho provato ad aggiungere una funzione in 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 viene passato per riferimento, quindi aggiorniamo questa proprietà in tempo reale
$post->post_title = $new_title;
}

Quindi nel mio index.php il codice appare così

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>




                    <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Link permanente a <?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; ?>

Grazie per il vostro prezioso aiuto.

0
Tutte le risposte alla domanda 2
5

La tua domanda non è molto chiara, perché, sì, è possibile modificare i dati del post a livello di codice, e sei sulla strada giusta usando wp_update_post, ma non sono sicuro di cosa stia cercando di ottenere il codice nel file index.php del tuo tema.

La mia ipotesi è che tu voglia poter modificare il titolo del post dal tuo tema, ma non stai passando nulla a afunction() per aggiornarlo.

Inoltre, nella tua funzione sopra, quando chiami mb_convert_case, stai anche ridefinendo $new_title come il titolo originale del post, quindi quando viene eseguito $post->post_title === $new_title, risulta sempre vero.

Per ottenere quello che penso tu stia cercando di fare, farei qualcosa del genere:

In functions.php:

function afunction( $post, $new_title ) {
  // se new_title non è definito, esci
  if ( empty ( $new_title ) ) {
      return;
  }    

  // assicura che $new_title sia in title case
  $new_title = mb_convert_case( $new_title, MB_CASE_TITLE, "UTF-8" );

  // se $new_title è definito ma corrisponde al titolo corrente, esci
  if ( $post->post_title === $new_title ) {
      return;
  }

  // inserisci il post corrente e $new_title in un array
  $post_update = array(
    'ID'         => $post->ID,
    'post_title' => $new_title
  );

  wp_update_post( $post_update );
}

Aggiornato: Nel tuo file del tema (index.php, page.php, single.php, ecc.):

<?php while (have_posts()) : the_post(); ?>

   <h2>
       <a href="<?php the_permalink() ?>" rel="bookmark" title="Link permanente a <?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 = 'Nuovo Titolo';
        afunction( $post, $new_title );
    ?>

<?php endwhile; ?>

Dovrai aggiornare almeno una volta per vedere il cambiamento. Se modifichi manualmente il file del tuo tema, dovrai aggiornare due volte. Una prima volta per caricare il file modificato, una seconda per eseguire l'aggiornamento. Per evitare ciò, dovresti eseguire una richiesta POST (vedi l'HTTP API di WordPress), o qualcosa di simile.

Questa non è una cosa che normalmente si farebbe con WordPress. Ma posso immaginare alcune situazioni in cui sarebbe appropriato. In generale, una buona pratica sarebbe consentire solo agli utenti loggati di eseguire azioni che aggiornano i dati del post nel tuo database.

Nota: Fai particolare attenzione che se, come nel tuo esempio index.php, stai usando if (have_posts()) : while (have_posts()) : the_post(); devi anche chiuderlo con endif; DOPO tutto il tuo codice.

Consiglio inoltre di rivedere altri esempi di file del tema dal tema predefinito, e di controllare attentamente la logica del tuo PHP per individuare problemi.

Spero che questo ti sia utile.

19 nov 2014 23:56:48
Commenti

non funziona

Avinash Babu Avinash Babu
20 nov 2014 14:34:29

il codice che mi hai fornito funziona bene ma il titolo non viene visualizzato... quando guardo i post il titolo funziona correttamente ma quando guardo il sito web non mi mostra il post

Avinash Babu Avinash Babu
20 nov 2014 14:47:41

Dato che stai aggiornando il titolo su index.php, dovresti assicurarti che stai effettivamente visualizzando il post corretto. A seconda del tuo tema, potresti stare visualizzando una Pagina invece di un Post. Poi, assicurati di avere ancora <?php the_title(); ?> nel tuo template. Potresti anche dover aggiornare la pagina due volte per vedere le modifiche.

pwbred pwbred
20 nov 2014 15:00:44

sì, c'è the_title() ma non mostra il post e il titolo

Avinash Babu Avinash Babu
20 nov 2014 15:23:42

Ho aggiornato la mia risposta con il codice completo del tema da utilizzare. Funziona per me poiché l'ho testato. Se hai ancora problemi, potrebbe essere meglio fare ulteriori ricerche e, quando hai raggiunto un vicolo cieco, pubblicare una nuova domanda con una spiegazione dettagliata e un codice di esempio completo. Probabilmente lo farai già, ma poiché la tua domanda originale è stata risposta, potresti ritenere appropriato contrassegnarla come "accettata".

pwbred pwbred
20 nov 2014 16:38:54
0
-1

Non sono un bravissimo programmatore, e anche il mio inglese non è il massimo, ma penso che tu debba inserire un titolo per ogni post che crei, quindi

  if ( empty ( $post->post_title ) )
    return;

è sempre falso

Non capisco perché tu voglia cambiare il titolo con il codice, non è utile!

Forse potresti iniziare con qualche tutorial sulla creazione di temi.. prova Google

19 nov 2014 20:13:06