<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>voragine.net &#187; functions.php</title>
	<atom:link href="http://voragine.net/etiquetas/functions-php/feed" rel="self" type="application/rss+xml" />
	<link>http://voragine.net</link>
	<description>Autonomía digital y tecnológica.</description>
	<lastBuildDate>Fri, 04 May 2012 17:37:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Personalizando la lista de comentarios de WordPress: callback en wp_list_comments</title>
		<link>http://voragine.net/wordpress/personalizando-la-lista-de-comentarios-de-wordpress-callback-en-wp_list_comments</link>
		<comments>http://voragine.net/wordpress/personalizando-la-lista-de-comentarios-de-wordpress-callback-en-wp_list_comments#comments</comments>
		<pubDate>Tue, 21 Feb 2012 07:02:01 +0000</pubDate>
		<dc:creator>skotperez</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[comentarios]]></category>
		<category><![CDATA[functions.php]]></category>
		<category><![CDATA[wp_list_comments]]></category>

		<guid isPermaLink="false">http://voragine.net/?p=913</guid>
		<description><![CDATA[Antes de la versión 2.7 de WordPress la lista de comentarios se generaba con loop que recorría la array <code>$comments</code> mediante un <code>foreach</code>, de manera que se podía especificar el código a generar para cada comentario. A partir de dicha versión, se introdujo la función <code>wp_list_comments</code>, que genera ella solita la lista de comentarios, con unos valores por omisión que pueden no convenirnos. Para cambiarlos, <code>wp_list_comments</code> dispone del parámetro <code>callback</code>, que permite llamar a una segunda función que defina un código personalizado.]]></description>
			<content:encoded><![CDATA[<p>Antes de la versión 2.7 de WordPress la lista de comentarios se generaba con loop que recorría la array <code>$comments</code> mediante un <code>foreach</code>, de manera que se podía especificar el código a generar para cada comentario. A partir de dicha versión, se introdujo la función <code>wp_list_comments</code>, que genera ella solita la lista de comentarios, con unos valores por omisión que pueden no convenirnos. Para cambiarlos, <code>wp_list_comments</code> dispone del parámetro <code>callback</code>, que permite llamar a una segunda función que defina un código personalizado.</p>
<p>Además <code>wp_list_comments</code> ofrece la posibilidad de devolver todos los comentarios, solo los &#8220;humanos&#8221; o solo los pings, especificando el valor correcto con el parámetro <code>type</code>.</p>
<p>Podemos personalizar también distintos mensajes que se incluyen en la lista, como por ejemplo el texto del enlace para responder a un comentario.</p>
<p>El siguiente código devuelve una lista de comentarios tipo <code>lista ol</code> conteniendo únicamente los &#8220;humanos&#8221; (excluyendo los pings), define algunos mensajes personalizados y hace una llamada mediante <code>callback</code> a la función <code>custom_comment</code> que define la estructura de la lista:</p>
<pre class="brush: php; title: ; notranslate">
// human comments list
wp_list_comments( array(
  'style' =&gt; 'ol',
  'type' =&gt; 'comment',
  'reply_text' =&gt; 'responder a este comentario',
  'login_text' =&gt; 'iniciar sesión para comentar',
  'callback' =&gt; 'custom_comment'
 ) );
</pre>
<p>En este caso, la función al especificar la opción <code>style=ol</code>, debemos envolverla en un contenedor homónimo:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;ol id=&quot;comments-list&quot;&gt;
&lt;?php wp_list_comments(); ?&gt;
&lt;/ol&gt;&lt;!-- end #comments-list --&gt;
</pre>
<p>La función <code>custom_comment</code> debemos alojarla en el archivo <code>functions.php</code> de nuestro theme y debe tener una estructura parecida al siguiente ejemplo:</p>
<pre class="brush: php; title: ; notranslate">
// comprobamos que la función existe
if ( ! function_exists( 'custom_comment' ) ) :

  function custom_comment( $comment, $args, $depth ) {
    $GLOBALS['comment'] = $comment;
    // en el caso de que el comentario no sea humano
    switch ( $comment-&gt;comment_type ) :
      case 'pingback' :
      case 'trackback' :

        // código HTML para pings...

    break;
    // en el caso de que el comentario sea humano
      default :

        // si el comentario está pendiente de aprobación
        if ($comment-&gt;comment_approved == '0') {
           // mensaje y código HTML para comentarios pendientes de aprobación
	   // &quot;Tu comentario debe ser aprobado por un editor antes de publicarse.&quot;
           // o algo así

        // si el comentario está aprobado
        } else {
           // código HTML para cada comentario
           // incluir la comment_reply_link() para habilitar la respuesta a un comentario:
           // comment_reply_link( array_merge( $args, array( 'reply_text' =&gt; 'Responder a este comentario', 'depth' =&gt; $depth, 'max_depth' =&gt; $args['max_depth'] ) ) );
        } // end if comment is approved

    break;
    endswitch;
  } // end function custom_comment

endif; // end comprobación custom_comment()
</pre>
<p>Esta función diferencia la manera en la que se generan los comentarios humanos de los pingbacks y trackbacks. Si llamamos a la función <code>wp_list_comments</code> dos veces en nuestro archivo <code>comments.php</code> podemos separar los comentarios humanos de los pings:</p>
<pre class="brush: php; title: ; notranslate">
// human comments list
wp_list_comments( array(
  'style' =&gt; 'ol',
  'type' =&gt; 'comment',
  'reply_text' =&gt; 'responder a este comentario',
  'login_text' =&gt; 'iniciar sesión para comentar',
  'callback' =&gt; 'custom_comment'
 ) );

// pings list
wp_list_comments( array(
  'style' =&gt; 'ul',
  'type' =&gt; 'pings',
  'callback' =&gt; 'custom_comment'
 ) );
</pre>
<p>En el Codex de WordPress podemos encontrar todos los detalles de <strong><a title="Function Reference/wp list comments -- WordPress Codex" href="http://codex.wordpress.org/Function_Reference/wp_list_comments">cómo personalizar el uso de </a><code><a title="Function Reference/wp list comments -- WordPress Codex" href="http://codex.wordpress.org/Function_Reference/wp_list_comments">wp_list_comments</a></code></strong>.</p>
<p>Para saber cómo usar <code>wp_list_comments</code> se puede consultar la entrada de este blog <strong><a title="Entendiendo el sistema de comentarios en WordPress: wp_list_comments y comment_form -- voragine.net" href="http://voragine.net/wordpress/entendiendo-el-sistema-de-comentarios-en-wordpress-wp_list_comments-y-comment_form">Entendiendo el sistema de comentarios en WordPress: wp_list_comments y comment_form</a></strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://voragine.net/wordpress/personalizando-la-lista-de-comentarios-de-wordpress-callback-en-wp_list_comments/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dos formas para saber si una página tiene subpáginas en WordPress</title>
		<link>http://voragine.net/wordpress/dos-formas-para-saber-si-una-pagina-tiene-subpaginas-en-wordpress</link>
		<comments>http://voragine.net/wordpress/dos-formas-para-saber-si-una-pagina-tiene-subpaginas-en-wordpress#comments</comments>
		<pubDate>Wed, 16 Nov 2011 07:35:51 +0000</pubDate>
		<dc:creator>skotperez</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[functions.php]]></category>
		<category><![CDATA[get_pages]]></category>
		<category><![CDATA[has_children]]></category>
		<category><![CDATA[page]]></category>

		<guid isPermaLink="false">http://voragine.net/?p=822</guid>
		<description><![CDATA[Sencilla <strong><a title="WordPress has_children() function -- Forrst" href="http://forrst.com/posts/WordPress_has_children_function-DmS">función para saber si una página tiene subpáginas</a></strong>. Si se invoca sin parámetro evaluará la página actual; si se provee un identificador de página como parámetro, evaluará esa página. A mí no me acaba de convencer ni funcionar, pero ahí queda. Prefiero <a title="How to Check if a WordPress Page Has Children/subpages -- jeangalea.com" href="http://www.jeangalea.com/posts/wordpress/check-wordpress-page-childrensubpages/">el viejo método del count</a>.]]></description>
			<content:encoded><![CDATA[<p>Sencilla <strong><a title="WordPress has_children() function -- Forrst" href="http://forrst.com/posts/WordPress_has_children_function-DmS">función para saber si una página tiene subpáginas</a></strong>. Si se invoca sin parámetro evaluará la página actual; si se provee un identificador de página como parámetro, evaluará esa página.</p>
<pre class="brush: php; title: ; notranslate">
function has_children($child_of = null) {
	if(is_null($child_of)) {
		global $post;
		$child_of = ($post-&gt;post_parent != '0') ? $post-&gt;post_parent : $post-&gt;ID;
	}
	return (wp_list_pages(&quot;child_of=$child_of&amp;echo=0&quot;)) ? true : false;
}
</pre>
<p>Basta incluir la función en el archivo <code>functions.php</code>.</p>
<p>Si no se quiere depender de functions.php o se necesita la consulta puntualmente, siempre se puede recurrir al <a title="How to Check if a WordPress Page Has Children/subpages -- jeangalea.com" href="http://www.jeangalea.com/posts/wordpress/check-wordpress-page-childrensubpages/">viejo método del count</a>:</p>
<pre class="brush: php; title: ; notranslate">
$children = get_pages('child_of='.$post-&gt;ID);?&gt;
if( count( $children ) != 0 ) { // Has Children }
else { // No children }
</pre>
]]></content:encoded>
			<wfw:commentRss>http://voragine.net/wordpress/dos-formas-para-saber-si-una-pagina-tiene-subpaginas-en-wordpress/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programar un shortcode en WordPress</title>
		<link>http://voragine.net/wordpress/programar-un-shortcode-en-wordpress</link>
		<comments>http://voragine.net/wordpress/programar-un-shortcode-en-wordpress#comments</comments>
		<pubDate>Mon, 14 Feb 2011 19:39:45 +0000</pubDate>
		<dc:creator>skotperez</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[add_shortcode]]></category>
		<category><![CDATA[functions.php]]></category>
		<category><![CDATA[shortcodes]]></category>

		<guid isPermaLink="false">http://voragine.net/?p=565</guid>
		<description><![CDATA[Los <a title="Shortcodes API -- WordPress API" href="http://codex.wordpress.org/Shortcode_API"><strong>shortcodes</strong></a> son códigos que se incluyen en el contenido de un post o una página y realizan una acción, atajos que cualquier usuario puede usar de manera trivial y que tienen detrás cualquier tipo de código que no necesitan conocer. Pueden ser muy útiles para incluir desde estilos hasta complejas acciones. Para programar un shortcode sencillo basta incluir en el archivo <code>functions.php</code> la función <code>add_shortcode()</code>.]]></description>
			<content:encoded><![CDATA[<p>Los <a title="Shortcodes API -- WordPress API" href="http://codex.wordpress.org/Shortcode_API"><strong>shortcodes</strong></a> son códigos que se incluyen en el contenido de un post o una página y realizan una acción, atajos que cualquier usuario puede usar de manera trivial y que tienen detrás cualquier tipo de código que no necesitan conocer. Pueden ser muy útiles para incluir desde estilos hasta complejas acciones.</p>
<p>Para programar un shortcode sencillo basta incluir en el archivo <code>functions.php</code> la función <code>add_shortcode()</code> de la siguiente manera:</p>
<pre class="brush: php; title: ; notranslate">
add_shortcode('nombre-del-shortcode', 'funcion-a-la-que-llama');
</pre>
<p>Para ejecutarlo basta incluir en el contenido de un post o una página el nombre del shortcode entre corchetes:</p>
<pre class="brush: xml; title: ; notranslate">
[nombre-del-shortcode]
</pre>
<p>En <em>Smash Magazine</em> se puede encontrar un tutorial en el que se explica en detalle <a title="Mastering WordPress Shortcodes -- Smash Magazine" href="http://www.smashingmagazine.com/2009/02/02/mastering-wordpress-shortcodes/"><strong>cómo programar distintos tipos de shortcodes</strong></a>.</p>
<p>Como ejemplo, este sencillo shortcode que añade un separador en forma de línea en el lugar donde lo incluyamos:</p>
<pre class="brush: php; title: ; notranslate">
// creamos la función a la que llamaremos con el shortcodes
function blueline() {
        return &quot;&lt;div class='blueline'&gt;&lt;hr /&gt;&lt;/div&gt;&quot;;
}
// creamos el shortcode
add_shortcode( 'linea', 'blueline' );
</pre>
<p>Y para llamar al shorcode:</p>
<pre class="brush: xml; title: ; notranslate">
[linea]
</pre>
]]></content:encoded>
			<wfw:commentRss>http://voragine.net/wordpress/programar-un-shortcode-en-wordpress/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo saber si una página tiene subpáginas en WordPress</title>
		<link>http://voragine.net/wordpress/como-saber-si-una-pagina-tiene-subpaginas-en-wordpress</link>
		<comments>http://voragine.net/wordpress/como-saber-si-una-pagina-tiene-subpaginas-en-wordpress#comments</comments>
		<pubDate>Tue, 04 Jan 2011 18:20:04 +0000</pubDate>
		<dc:creator>skotperez</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[functions.php]]></category>
		<category><![CDATA[get_pages]]></category>

		<guid isPermaLink="false">http://voragine.net/?p=489</guid>
		<description><![CDATA[Para saber si una página tiene o no subpáginas en WordPres, lo que podemos necesitar para hacer una sentencia condicional podemos aplicar el siguiente código:]]></description>
			<content:encoded><![CDATA[<p>Para saber si una página tiene o no subpáginas en WordPres, lo que podemos necesitar para hacer una sentencia condicional podemos aplicar el siguiente código:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
$children = get_pages(&quot;child_of=$post-&gt;ID&quot;); ?&gt;
if( count( $children ) != 0 ) { la página no tiene subpáginas }
else { la página tiene subpáginas }
?&gt;
</pre>
<p>Visto en <a title="[resolved] If/Else Statement for if a page has child pages? (6 posts) -- WordPress Forums" href="http://wordpress.org/support/topic/ifelse-statement-for-if-a-page-has-child-pages"><em>los foros de WordPress</em></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://voragine.net/wordpress/como-saber-si-una-pagina-tiene-subpaginas-en-wordpress/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Función de WordPress para obtener el identificador de una taxonomía a partir de su nombre</title>
		<link>http://voragine.net/wordpress/funcion-de-wordpress-para-obtener-el-identificador-de-una-taxonomia-a-partir-de-su-nombre</link>
		<comments>http://voragine.net/wordpress/funcion-de-wordpress-para-obtener-el-identificador-de-una-taxonomia-a-partir-de-su-nombre#comments</comments>
		<pubDate>Tue, 04 Jan 2011 16:45:11 +0000</pubDate>
		<dc:creator>skotperez</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[functions.php]]></category>
		<category><![CDATA[taxonomía]]></category>

		<guid isPermaLink="false">http://voragine.net/?p=487</guid>
		<description><![CDATA[Con la siguiente función podremos obtener el identificador de una taxonomía (lo que incluye etiquetas, categorías, categorías de enlaces y cualquier otra que creemos) a partir de su nombre. Para ello basta incluirla en el archivo <code>functions.php</code> del tema que estemos usando y llamarla adecuadamente en la plantilla que lo necesitemos.]]></description>
			<content:encoded><![CDATA[<p>Con la siguiente función podremos obtener el identificador de una taxonomía (lo que incluye etiquetas, categorías, categorías de enlaces y cualquier otra que creemos) a partir de su nombre. Para ello basta incluirla en el archivo <code>functions.php</code> del tema que estemos usando y llamarla adecuadamente en la plantilla que lo necesitemos.</p>
<p>Para una categoría:</p>
<pre class="brush: php; title: ; notranslate">
function get_category_id($cat_name){
	$term = get_term_by('name', $cat_name, 'category');
	return $term-&gt;term_id;
}
</pre>
<p>Para una etiqueta:</p>
<pre class="brush: php; title: ; notranslate">
function get_tag_id($tag_name){
	$term = get_term_by('name', $tag_name, 'tag');
	return $term-&gt;term_id;
}
</pre>
<p>Para una taxonomía llamada autor, que podemos haber creado, por ejemplo, para un catálogo de libros:</p>
<pre class="brush: php; title: ; notranslate">
function get_autor_id($autor_name){
	$term = get_term_by('name', $autor_name, 'autor');
	return $term-&gt;term_id;
}
</pre>
<p>Para llamar a las funciones bastará:</p>
<pre class="brush: php; title: ; notranslate">
$category_ID = get_category_id('Tutoriales de WordPress');
$tag_ID = get_tag_id('PHP');
$autor_ID = get_autor_id('Miguel de Cervantes');
</pre>
<p>Visto en <a title="WordPress function: Get category ID using category name -- WP Recipes" href="http://www.wprecipes.com/wordpress-function-get-category-id-using-category-name"><em>WP Recipes</em></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://voragine.net/wordpress/funcion-de-wordpress-para-obtener-el-identificador-de-una-taxonomia-a-partir-de-su-nombre/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo excluir categorías del feed en WordPress</title>
		<link>http://voragine.net/wordpress/como-excluir-categorias-del-feed-en-wordpress</link>
		<comments>http://voragine.net/wordpress/como-excluir-categorias-del-feed-en-wordpress#comments</comments>
		<pubDate>Wed, 07 Jul 2010 14:47:39 +0000</pubDate>
		<dc:creator>skotperez</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[feed]]></category>
		<category><![CDATA[functions.php]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[RSS]]></category>

		<guid isPermaLink="false">http://voragine.net/?p=386</guid>
		<description><![CDATA[Para <a title="Excluir categorías del Feed RSS en WordPress -- Foro Beta" href="http://forobeta.com/wordpress/1146-excluir-categorias-del-feed-rss-wordpress.html"><strong>excluir contenido del feed en WordPress y que no se envíe al ser publicado</strong></a> basta incluir un pequeño código en el archivo <code>functions.php</code> del tema que se esté usando, o meter el mismo código en un archivo dedicado y alojarlo en la carpeta <code>plugins/</code>, y activar el plugin después.]]></description>
			<content:encoded><![CDATA[<p>Para <a title="Excluir categorías del Feed RSS en WordPress -- Foro Beta" href="http://forobeta.com/wordpress/1146-excluir-categorias-del-feed-rss-wordpress.html"><strong>excluir contenido del feed en WordPress y que no se envíe al ser publicado</strong></a> basta incluir un pequeño código en el archivo <code>functions.php</code> del tema que se esté usando, o meter el mismo código en un archivo dedicado y alojarlo en la carpeta <code>plugins/</code>, y activar el plugin después. El código es el siguiente:</p>
<pre class="brush: php; title: ; notranslate">function myFilter($query) {
if ($query-&gt;is_feed) {
$query-&gt;set('cat','-120');
}
return $query;
}
add_filter('pre_get_posts','myFilter');</pre>
]]></content:encoded>
			<wfw:commentRss>http://voragine.net/wordpress/como-excluir-categorias-del-feed-en-wordpress/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

