Programar la creación de Posts en WordPress


A veces tenemos que hacer ciertas tareas que nos obligan a crear posts mediante código y no con el admisnitrador: volcados de datos, crons, plugins extraños…

Para eso podemos hacer uso de la función: wp_insert_post();

Simplemente hay que definir el array asociativo que contendrá el post y luego lanzar la función.

Seguidamente una mini-referencia de que indices podemos declarar en el array:

$post = array(
  // Básicos
  'post_status' => [ 'draft' | 'publish' | 'pending' ] // Cuidado, por defecto se publican como 'Draft' asi que conviene declararlo.
  'post_title' => [  ] // El título del post.
  'post_excerpt' => [ <excerpt> ] // Extracto
  'post_content' => [ <html> ] // HTML del post que estamos creando.
  'post_author' => [ <user ID> ] // Id del autor
  'post_category' => [ array(<category id>, <...>) ] // Ids de las categorias
  'tags_input' => [ '<tag>, <tag>, <...>' ] // indicando los tags
  
  // Para páginas
  'post_type' => [ 'post' | 'page' ] // Es un post o una página? (por defecto 'post')
  'page_template' => [ <template file> ] // Si la página usa un template propio lo podemos indicar.
  'menu_order' => [ <order> ] // Para páginas. Indicar el número de página.

  // Otras opciones
  'post_parent' => [ <post ID> ] // Si es un post hijo, declaramos el id del padre  
  'comment_status' => [ 'closed' | 'open' ] // Si lo cerramos no admitiremos comentarios
  'ID' => [ <post id> ] // por si lo que estamos haciendo es en realidad un update (aunque para eso hay otra función)
  'post_date' => [ Y-m-d H:i:s ] // DateTime de creación (por defecto la actual)
  'post_date_gmt' => [ Y-m-d H:i:s ] // DateTime en GMT.
); 
wp_insert_post($post);
</pre>
<ul>
<li>Más info: <a href="http://codex.wordpress.org/Function_Reference/wp_insert_post" rel="nofollow">wp_insert_post()</a>
</ul>
</div>


<div style="height:32px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-group is-layout-flex wp-block-group-is-layout-flex"><div style="font-style:italic;font-weight:400;" class="wp-block-post-date has-small-font-size"><time datetime="2009-03-08T22:43:48+01:00">marzo 8, 2009</time></div>

<div class="wp-block-post-author has-small-font-size wp-duotone-default-filter"><div class="wp-block-post-author__content"><p class="wp-block-post-author__name">Iñaki Huerta</p></div></div>

<div class="taxonomy-category wp-block-post-terms has-small-font-size"><a href="https://blog.ikhuerta.com/tema/programacion" rel="tag">programacion</a></div>

<div class="taxonomy-post_tag wp-block-post-terms has-small-font-size"><a href="https://blog.ikhuerta.com/sobre/tutoriales" rel="tag">tutoriales</a><span class="wp-block-post-terms__separator">, </span><a href="https://blog.ikhuerta.com/sobre/wordpress" rel="tag">wordpress</a></div></div>



<div style="height:32px" aria-hidden="true" class="wp-block-spacer"></div>



<hr class="wp-block-separator is-style-wide"/>


<div class="wp-block-post-comments">
<!-- You can start editing here. -->

	<h3 id="comments">
		3 respuestas a “Programar la creación de Posts en WordPress”	</h3>

	<div class="navigation">
		<div class="alignleft"></div>
		<div class="alignright"></div>
	</div>

	<ol class="commentlist">
			<li id="comment-1875" class="comment even thread-even depth-1">
			<article id="div-comment-1875" class="comment-body">
				<footer class="comment-meta">
					<div class="comment-author vcard">
						<img alt='' src='http://0.gravatar.com/avatar/cb41c1dbf92b02004f2c5cd560a5a016?s=32&d=mm&r=g' srcset='http://0.gravatar.com/avatar/cb41c1dbf92b02004f2c5cd560a5a016?s=64&d=mm&r=g 2x' class='avatar avatar-32 photo' height='32' width='32' decoding='async'/>						<b class="fn">carlos</b> <span class="says">dice:</span>					</div><!-- .comment-author -->

					<div class="comment-metadata">
						<a href="https://blog.ikhuerta.com/programar-la-creacion-de-posts-en-wordpress#comment-1875"><time datetime="2011-09-29T15:26:17+01:00">2011-09-29 a las 15:26</time></a>					</div><!-- .comment-metadata -->

									</footer><!-- .comment-meta -->

				<div class="comment-content">
					<p>Hola IK</p>
<p>Tengo una duda con respecto al item ‘post_content’ en cual quiero colocar todo un codigo html de tablas anidadas, el tema es que con la funcion wp_insert_post() no me crea el post, y en cambio si uso el administrador de wordpress para crear post no me genera ningun problema a la hora de crear las tablas anidadas.</p>
<p>Como veras si recurro a esta consulta es porque le he dado mil vueltas y no encuentro la solucion.</p>
<p>Saludos y muchas gracias por tus post, me han sido de mucha utilidad.</p>
				</div><!-- .comment-content -->

				<div class="reply"><a rel='nofollow' class='comment-reply-link' href='https://blog.ikhuerta.com/programar-la-creacion-de-posts-en-wordpress?replytocom=1875#respond' data-commentid="1875" data-postid="108" data-belowelement="div-comment-1875" data-respondelement="respond" data-replyto="Responder a carlos" aria-label='Responder a carlos'>Responder</a></div>			</article><!-- .comment-body -->
		</li><!-- #comment-## -->
		<li id="comment-1884" class="comment byuser comment-author-blogtest_admin bypostauthor odd alt thread-odd thread-alt depth-1">
			<article id="div-comment-1884" class="comment-body">
				<footer class="comment-meta">
					<div class="comment-author vcard">
						<img alt='' src='http://1.gravatar.com/avatar/47c315e3a1bb8f31352606a1a0358478?s=32&d=mm&r=g' srcset='http://1.gravatar.com/avatar/47c315e3a1bb8f31352606a1a0358478?s=64&d=mm&r=g 2x' class='avatar avatar-32 photo' height='32' width='32' decoding='async'/>						<b class="fn"><a href="http://ikhuerta.com" class="url" rel="ugc external nofollow">ikhuerta</a></b> <span class="says">dice:</span>					</div><!-- .comment-author -->

					<div class="comment-metadata">
						<a href="https://blog.ikhuerta.com/programar-la-creacion-de-posts-en-wordpress#comment-1884"><time datetime="2011-10-04T16:27:26+01:00">2011-10-04 a las 16:27</time></a>					</div><!-- .comment-metadata -->

									</footer><!-- .comment-meta -->

				<div class="comment-content">
					<p>Buenas carlos,</p>
<p>Lo que hace un tiempo funcionaba puede que ahora no funcione exactamente igual. Hace mucho que no uso esa funcion con lo cual echarle un ojo a la documentación de wordpress para ver si todas las variables siguen funcionando igual y de paso mirar si no hay alguna nueva obligatoria no estaría mal:</p>
<p><a href="http://codex.wordpress.org/Function_Reference/wp_insert_post" rel="nofollow ugc">http://codex.wordpress.org/Function_Reference/wp_insert_post</a></p>
<p>Lo que comentas es raro… si no entiendo mal, la publicación te la está haciendo pero te esta modificando post_content y le está añadiendo quitando el codigo html de </p>
<table>… </table>
<p> etc? </p>
<p>Te diría que revisases si es eso, probando otros htmls a ver que sudece. </p>
<p>Comentarte que los posts en wordpress no son exactametne html sino mezcla de html y texto ya que worpdress utiliza su función wpautop() para mostrar los posts (una funcion que basicamente transforma enters en <br /> y 2 enters segidos en «</p>
<p>«, pero puede que haga algo más. Así pues, para poder hacer hacer un codigo html propio deberías hacerlo evitando siempre los enters.</p>
<p>Mira como se guarda en la base de datos tu insert no vaya a ser que sea luego la funcion wpautop() la que te rompa esas tablas. De la misma forma observa…</p>
				</div><!-- .comment-content -->

				<div class="reply"><a rel='nofollow' class='comment-reply-link' href='https://blog.ikhuerta.com/programar-la-creacion-de-posts-en-wordpress?replytocom=1884#respond' data-commentid="1884" data-postid="108" data-belowelement="div-comment-1884" data-respondelement="respond" data-replyto="Responder a ikhuerta" aria-label='Responder a ikhuerta'>Responder</a></div>			</article><!-- .comment-body -->
		</li><!-- #comment-## -->
		<li id="comment-1893" class="comment even thread-even depth-1">
			<article id="div-comment-1893" class="comment-body">
				<footer class="comment-meta">
					<div class="comment-author vcard">
						<img alt='' src='http://0.gravatar.com/avatar/cb41c1dbf92b02004f2c5cd560a5a016?s=32&d=mm&r=g' srcset='http://0.gravatar.com/avatar/cb41c1dbf92b02004f2c5cd560a5a016?s=64&d=mm&r=g 2x' class='avatar avatar-32 photo' height='32' width='32' loading='lazy' decoding='async'/>						<b class="fn">carlos</b> <span class="says">dice:</span>					</div><!-- .comment-author -->

					<div class="comment-metadata">
						<a href="https://blog.ikhuerta.com/programar-la-creacion-de-posts-en-wordpress#comment-1893"><time datetime="2011-10-12T19:14:58+01:00">2011-10-12 a las 19:14</time></a>					</div><!-- .comment-metadata -->

									</footer><!-- .comment-meta -->

				<div class="comment-content">
					<p>Hola IK</p>
<p>Estuve probando lo que me decis, evitando y no los enters con tablas simples y anidadas pero todas vacias y resulto que me las guardaba.</p>
<p>Entonces llegue a la conclusion de que el problema se me daba cuando las tablas tenian estilos y demas etiquetas html con estilos css.</p>
<p>La solucion era bien simple, solo tenia que usar la funcion utf8_encode($html_tabla) y eso era todo.</p>
<p>Aca dejo un ejemplo de mi solucion:</p>
<p>$contenido = ‘<br />
               ….<br />
              ‘;</p>
<p>$post = array(<br />
									‘post_status’ => ‘publish’,<br />
									‘post_title’ => ‘Titulo de mi Post’,<br />
 									‘post_content’ => utf8_encode($contenido),<br />
									‘post_author’ => 1,<br />
									‘post_type’ => ‘post’,<br />
  								‘comment_status’ => ‘closed’,<br />
	); </p>
<p>Bueno espero les sea de utilidad a los que pasen por aca. </p>
<p>Mis saludos y agradecimientos a vos Ik por este espacio, tiempo y conocimientos compratidos.</p>
<p>Saludos!!.</p>
				</div><!-- .comment-content -->

				<div class="reply"><a rel='nofollow' class='comment-reply-link' href='https://blog.ikhuerta.com/programar-la-creacion-de-posts-en-wordpress?replytocom=1893#respond' data-commentid="1893" data-postid="108" data-belowelement="div-comment-1893" data-respondelement="respond" data-replyto="Responder a carlos" aria-label='Responder a carlos'>Responder</a></div>			</article><!-- .comment-body -->
		</li><!-- #comment-## -->
	</ol>

	<div class="navigation">
		<div class="alignleft"></div>
		<div class="alignright"></div>
	</div>

	<div id="respond" class="comment-respond">
		<h3 id="reply-title" class="comment-reply-title">Deja una respuesta <small><a rel="nofollow" id="cancel-comment-reply-link" href="/programar-la-creacion-de-posts-en-wordpress#respond" style="display:none;">Cancelar la respuesta</a></small></h3><form action="http://blog.ikhuerta.com/wp-comments-post.php" method="post" id="commentform" class="comment-form" novalidate><p class="comment-notes"><span id="email-notes">Tu dirección de correo electrónico no será publicada.</span> <span class="required-field-message">Los campos obligatorios están marcados con <span class="required">*</span></span></p><p class="comment-form-comment"><label for="comment">Comentario <span class="required">*</span></label> <textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required></textarea></p><p class="comment-form-author"><label for="author">Nombre <span class="required">*</span></label> <input id="author" name="author" type="text" value="" size="30" maxlength="245" autocomplete="name" required /></p>
<p class="comment-form-email"><label for="email">Correo electrónico <span class="required">*</span></label> <input id="email" name="email" type="email" value="" size="30" maxlength="100" aria-describedby="email-notes" autocomplete="email" required /></p>
<p class="comment-form-url"><label for="url">Web</label> <input id="url" name="url" type="url" value="" size="30" maxlength="200" autocomplete="url" /></p>
<p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes" /> <label for="wp-comment-cookies-consent">Guarda mi nombre, correo electrónico y web en este navegador para la próxima vez que comente.</label></p>
<p class="form-submit wp-block-button"><input name="submit" type="submit" id="submit" class="submit wp-block-button__link wp-element-button" value="Publicar el comentario" /> <input type='hidden' name='comment_post_ID' value='108' id='comment_post_ID' />
<input type='hidden' name='comment_parent' id='comment_parent' value='0' />
</p></form>	</div><!-- #respond -->
	</div></div>
</main>


<footer class="wp-block-template-part">
<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained" style="padding-top:var(--wp--custom--spacing--large, 8rem)">
<div class="wp-block-group alignfull is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-group alignwide is-content-justification-space-between is-layout-flex wp-container-core-group-is-layout-8 wp-block-group-is-layout-flex" style="padding-top:4rem;padding-bottom:4rem">
<ul>
<li><a href="https://blog.ikhuerta.com//sobre/seo-onpage" data-type="link" data-id="https://blog.ikhuerta.com//sobre/seo-onpage">Seo On Page</a></li>



<li><a href="https://blog.ikhuerta.com//sobre/seo-offpage" data-type="link" data-id="https://blog.ikhuerta.com//sobre/seo-offpage">Seo Off Page</a></li>



<li><a href="https://blog.ikhuerta.com//sobre/estrategias-seo Estrategias Seo">Estrategias Seo</a></li>



<li><a href="https://blog.ikhuerta.com//sobre/consultor-seo" data-type="link" data-id="https://blog.ikhuerta.com//sobre/consultor-seo">Consultor Seo</a></li>



<li><a href="https://blog.ikhuerta.com//sobre/informes-seo" data-type="link" data-id="https://blog.ikhuerta.com//sobre/informes-seo">Informes Seo</a></li>
</ul>



<ul>
<li><a href="https://blog.ikhuerta.com//tema/analitica-web">Analítica web</a></li>



<li><a href="https://blog.ikhuerta.com/sobre/google-analytics" data-type="link" data-id="https://blog.ikhuerta.com/sobre/google-analytics">Google Analytics</a></li>



<li><a href="https://blog.ikhuerta.com/sobre/universal-analytics" data-type="link" data-id="https://blog.ikhuerta.com/sobre/universal-analytics">Universal Analytics</a></li>



<li><a href="https://blog.ikhuerta.com/sobre/informes-personalizados-google-analytics" data-type="link" data-id="https://blog.ikhuerta.com/sobre/informes-personalizados-google-analytics">Informes Personalizados de Google Analytics</a></li>
</ul>
</div>
</div>
</div>
</footer>
</div>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 0 0" width="0" height="0" focusable="false" role="none" style="visibility: hidden; position: absolute; left: -9999px; overflow: hidden;" ><defs><filter id="wp-duotone-default-filter"><feColorMatrix color-interpolation-filters="sRGB" type="matrix" values=" .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 " /><feComponentTransfer color-interpolation-filters="sRGB" ><feFuncR type="table" tableValues="0 1" /><feFuncG type="table" tableValues="0 1" /><feFuncB type="table" tableValues="0 1" /><feFuncA type="table" tableValues="1 1" /></feComponentTransfer><feComposite in2="SourceGraphic" operator="in" /></filter></defs></svg><script src="http://blog.ikhuerta.com/wp-includes/js/comment-reply.min.js?ver=6.5.2" id="comment-reply-js" async data-wp-strategy="async"></script>
<script id="wp-block-template-skip-link-js-after">
	( function() {
		var skipLinkTarget = document.querySelector( 'main' ),
			sibling,
			skipLinkTargetID,
			skipLink;

		// Early exit if a skip-link target can't be located.
		if ( ! skipLinkTarget ) {
			return;
		}

		/*
		 * Get the site wrapper.
		 * The skip-link will be injected in the beginning of it.
		 */
		sibling = document.querySelector( '.wp-site-blocks' );

		// Early exit if the root element was not found.
		if ( ! sibling ) {
			return;
		}

		// Get the skip-link target's ID, and generate one if it doesn't exist.
		skipLinkTargetID = skipLinkTarget.id;
		if ( ! skipLinkTargetID ) {
			skipLinkTargetID = 'wp--skip-link--target';
			skipLinkTarget.id = skipLinkTargetID;
		}

		// Create the skip link.
		skipLink = document.createElement( 'a' );
		skipLink.classList.add( 'skip-link', 'screen-reader-text' );
		skipLink.href = '#' + skipLinkTargetID;
		skipLink.innerHTML = 'Saltar al contenido';

		// Inject the skip link.
		sibling.parentElement.insertBefore( skipLink, sibling );
	}() );
	
</script>
</body>
</html>
<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="1aaac1ed81d3117439fd09e8-|49" defer></script>