Hace una media hora que estoy armando un código para hacer lo que queres hacer, pero llegue a un punto en que no puedo lograrlo sin editar archivos del core.
Igualmente dejo los cambios que hay que hacer, si algún programador pasa por el topic que tire tips.
(Nunca me había metido con el core de WP, hasta ahora...)
- Solo esta probado en WordPress 3.0
- No esta comprobado si causa efectos secundarios (aunque, supuestamente, solamente los ocasionaria mientras el código se esté ejecutando)
- NO se que pasara si al actualizarse la version de wordpress se modifica la tabla donde "estan" las tags.
- NO me hago responsable del código (Salvo que funcione y me quieras agradecer) (?)
Primero, ejecutar en la db:
Insertar CODE, HTML o PHP:
ALTER TABLE `wp_term_taxonomy` ADD `deletefromindex` INT( 1 ) NOT NULL ;
(Reemplazar
wp_ por tu prefijo)
Agregar en el functions.php del theme (Si, si, podría usarse un plugin, pero me fue mas rápido hacerlo de esta forma):
Insertar CODE, HTML o PHP:
// Agregar la opcion "Eliminar del index" cuando editas la tag
add_action('edit_tag_form_fields', 'delete_tag_from_index');
function delete_tag_from_index($tag)
{
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="slug">Eliminar del index</label></th>
<td><input name="deletefromindex" style="width: 20px;" id="deletefromindex" type="checkbox" <?php if($tag->deletefromindex) : ?>checked="checked"<?php endif; ?> />
<p class="description">Seleccionar si deseas no mostrar la tag en el index</p></td>.
</tr>
<?php
return true;
}
// Guardar la opción de "eliminar del index" cuando se edite la tag
add_action('edited_term_taxonomy', 'do_delete_tag_from_index');
function do_delete_tag_from_index($tagid = false, $taxonomy = false)
{
global $wpdb, $deletefromindex, $args;
if($_POST['deletefromindex'] == 'on')
$deletefromindex = 1;
else
$deletefromindex = 0;
$wpdb->update( $wpdb->term_taxonomy, compact( 'deletefromindex' ), array( 'term_taxonomy_id' => $tagid ) );
return true;
}
// Esta funcion imita a get_the_tags
function get_the_tags_noindex($before = null, $sep = null, $after = null)
{
$terms = get_the_terms( '0', 'post_tag' );
if ( is_wp_error( $terms ) )
return $terms;
if ( empty( $terms ) )
return false;
foreach ( $terms as $term ) {
if(!$term->deletefromindex)
{
$link = get_term_link( $term, $taxonomy );
if ( is_wp_error( $link ) )
return $link;
$term_links[] = '<a href="' . $link . '" rel="tag">' . $term->name . '</a>';
}
}
$term_links = apply_filters( "term_links-$taxonomy", $term_links );
return $before . join( $sep, $term_links ) . $after;
}
// Esta funcion imita a the_tags
function the_tags_noindex($before = null, $sep = null, $after = null)
{
echo get_the_tags_noindex($before, $sep, $after);
}
Luego debes reemplazar the_tags(***) por the_tags_noindex(***) en tus ficheros del theme.
Al hacer todo esto debería hacer aparecer una nueva opción cuando editas una tag en el panel de administrador. Seleccionala (es un checkbox) y la tag no se mostrará nunca más, siempre y cuando se use the_tags_noindex.
Espero que sirva para algo
😛
EDITADO: Tomando mate, lejos de la pc, se me ocurrio crear otra funcion imitando a the_tags, pero que borre las tags que no tendrían que mostrarse...
Muy simple, muy fácil, y no se me había ocurrido para nada. Actualizé mucha parte del post.