Cambiar el título de una entrada con código

19 nov 2014, 19:19:44
Vistas: 23K
Votos: 6

Soy nuevo en el desarrollo de WordPress. Estoy tratando de cambiar el título de una entrada individual... Así que he usado la función get_the_ID() para obtener una entrada específica.

Sé que el título puede ser cambiado manualmente por un usuario, pero quiero saber si esto se puede hacer con código.

He intentado agregar una función en functions.php

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

// Convierte el título al formato deseado
$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 se pasa por referencia, así que actualizamos esta propiedad en tiempo real
$post->post_title = $new_title;
}

Así que en mi index.php el código se ve así

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




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

Gracias por tu valiosa ayuda.

0
Todas las respuestas a la pregunta 2
5

Tu pregunta no es del todo clara, porque sí, es posible cambiar los datos de las publicaciones mediante programación, y vas por buen camino al usar wp_update_post, pero no estoy seguro de lo que intenta lograr el código en el archivo index.php de tu tema.

Supongo que deseas poder cambiar el título de la publicación desde tu tema, pero no estás pasando nada a afunction() para actualizarlo.

Además, en tu función anterior, cuando llamas a mb_convert_case, también estás redefiniendo $new_title como el título original de la publicación, por lo que cuando se ejecuta $post->post_title === $new_title, siempre equivale a verdadero.

Para lograr lo que creo que estás intentando hacer, haría algo así:

En functions.php:

function afunction( $post, $new_title ) {
  // si new_title no está definido, retornar
  if ( empty ( $new_title ) ) {
      return;
  }    

  // asegurar formato de título en $new_title
  $new_title = mb_convert_case( $new_title, MB_CASE_TITLE, "UTF-8" );

  // si $new_title está definido pero coincide con el título actual, retornar
  if ( $post->post_title === $new_title ) {
      return;
  }

  // colocar la publicación actual y $new_title en un array
  $post_update = array(
    'ID'         => $post->ID,
    'post_title' => $new_title
  );

  wp_update_post( $post_update );
}

Actualizado: En tu archivo de tema (index.php, page.php, single.php, etc):

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

   <h2>
       <a href="<?php the_permalink() ?>" rel="bookmark" title="Enlace 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 = 'Nuevo Título';
        afunction( $post, $new_title );
    ?>

<?php endwhile; ?>

Tendrás que actualizar al menos una vez para ver el cambio. Si cambias manualmente tu archivo de tema, tendrías que actualizar dos veces. Una para cargar el archivo modificado y una segunda para realizar la actualización. Para evitar eso, necesitarías realizar una solicitud POST (consulta la API HTTP de WordPress) o algo por el estilo.

Esto no es algo que normalmente se haría con WordPress. Pero puedo imaginar algunas situaciones en las que sería apropiado. En general, una buena práctica sería permitir solo que los usuarios registrados realicen acciones que actualicen los datos de las publicaciones en tu base de datos.

Nota: Ten especial cuidado de que si, como en tu ejemplo index.php, estás usando if (have_posts()) : while (have_posts()) : the_post();, también lo cierres con endif; DESPUÉS de todo tu código.

También recomiendo que revises otros ejemplos de archivos de tema del tema predeterminado y que revises la lógica de tu PHP para buscar problemas.

Espero que esto sea útil.

19 nov 2014 23:56:48
Comentarios

esto no está funcionando

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

el código que me has dado funciona bien pero el título no se muestra... cuando veo las entradas el título funciona correctamente pero cuando miro el sitio web no me muestra la entrada

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

Porque estás actualizando el título en index.php, deberías asegurarte de que en realidad estás viendo la entrada correcta. Dependiendo de tu tema, podrías estar viendo una Página en lugar de una Entrada. Luego, asegúrate de que todavía tienes <?php the_title(); ?> en tu plantilla. También puede que tengas que actualizar dos veces para ver el cambio en la página.

pwbred pwbred
20 nov 2014 15:00:44

sí, existe the_title() pero no está mostrando el post y el título

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

Actualicé mi respuesta con el código completo del tema para usar. Está funcionando para mí ya que lo he probado. Si todavía tienes problemas, podría ser mejor investigar más, y cuando hayas llegado a un callejón sin salida, publicar una nueva pregunta con una explicación detallada y código de muestra completo. Probablemente ya estés planeando hacer esto, pero como tu pregunta original ha sido respondida, podrías considerar marcar esto como 'aceptado'.

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

No soy un programador muy bueno, y ni siquiera mi inglés es el mejor, pero creo que debes ingresar un título para cada publicación que crees, así que

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

siempre será falso

No entiendo por qué quieres cambiar el título con el código, ¡no es útil!

Quizás podrías comenzar con algún tutorial sobre creación de temas... prueba Google

19 nov 2014 20:13:06