Añadir código en <head> por página o entrada

16 ago 2013, 12:53:54
Vistas: 16.9K
Votos: 4

¿Existe algún plugin (o una forma relativamente fácil) para añadir código a la sección <head> por página o entrada individual?

Tengo un sitio web multilingüe y necesito implementar el marcado rel="alternate" hreflang, por lo que necesito una forma de definir rel="alternate" individualmente en cada página/entrada.

He buscado en los plugins de WordPress pero no he encontrado nada hasta ahora. No soy programador, así que no puedo crear algo yo mismo, ¡a menos que sea bastante sencillo!

ACTUALIZACIÓN

OK, estoy intentando crear un campo personalizado para esta funcionalidad, esto es lo que tengo hasta ahora:

<link rel="alternate" href="<?php
    while (have_posts()) : the_post();
        $alternate = get_post_meta($post->ID, 'alternate', false);
        if ($alternate) {
            echo $alternate[0];
        }
    endwhile;
?>" hreflang="<?php
    while (have_posts()) : the_post();
        $hreflang = get_post_meta($post->ID, 'hreflang', false);
        if ($hreflang) {
            echo $hreflang[0];
        }
    endwhile;
?>" />

Esto funciona bien si solo quiero añadir una página alternativa. Cuando intento añadir más, solo se añade una instancia de rel="alternate", reemplazando la original con la última añadida.

Además, en las páginas donde no he definido estos campos personalizados, obtengo una etiqueta vacía:

<link rel="alternate" href="" hreflang="" />

¿Alguien puede indicarme la dirección correcta para corregir estos problemas?

2
Comentarios

Esto es lo que necesitas, un plugin perfecto https://wordpress.org/plugins/header-and-footer-scripts/

Niresh Niresh
17 oct 2015 06:48:52

No soy desarrollador pero necesitaba agregar código al área <head> para incrustar publicaciones de Google en publicaciones individuales de WordPress (no páginas). En una publicación de Google, las instrucciones de incrustación incluyen "agrega esta parte a la sección <head>, agrega esta parte donde quieras que aparezca la publicación en tu blog" (no son las palabras exactas). No tenía idea de qué es la sección Head, ya que soy un usuario regular de WordPress y no un programador. Pero una búsqueda de plugins arrojó este resultado: http://wordpress.org/plugins/per-page-add-to/ Espero que eso ayude.

User User
25 jun 2014 03:33:02
Todas las respuestas a la pregunta 5
0

Como mencionaste por página/entrada, esto funcionaría para cada entrada

add_action('wp_head', 'add_link_in_head');
function add_link_in_head()
{
    global $post;
    if(!empty($post))
    {
        $alternate = get_post_meta($post->ID, 'alternate', true); // URL alternativa
        $hreflang = get_post_meta($post->ID, 'hreflang', true); // Código de idioma
        if(!empty($alternate) && !empty($hreflang))
        {
            ?>
                <link rel="alternate" href="<?php echo $alternate; ?>" hreflang="<?php echo $hreflang; ?>" />
            <?php
        }
    }
}

Si no hay $alternate ni $hreflang entonces no se generará el enlace.

16 ago 2013 14:29:03
0

Usa el siguiente código en la sección <head>:

<?php
add_action('wp_head', 'tu_funcion');
function tu_funcion() {    
    //tu código irá aquí
} 
?>

Para más información puedes visitar aquí.

16 ago 2013 12:59:44
0

No sé cómo estás guardando tus datos, pero asumiendo que estás usando el cuadro meta "Campos personalizados" incorporado, tus múltiples páginas alternativas deberían venir como un array.

function alternate_pages_links() {  
  global $post;
  if (!is_singular()) {
    return;
  }
  $pat = '<link rel="alternate" href="%s" hreflang="%s" />';

  $lang = get_post_meta($post->ID, 'hreflang', true);
  $alt = get_post_meta($post->ID, 'alternate');

  if (!empty($alt) && !empty($lang)) {
    foreach ($alt as $a) {
      printf($pat,$a,$lang);
    }
  }
}
add_action('wp_head','alternate_pages_links');

Sin embargo, veo un problema potencial. Si vas a tener múltiples pares asociados de alternate/hreflang por entrada, entonces necesitas guardarlos como pares en la base de datos. A menos que lo hagas, no habrá forma de saber qué hreflang corresponde a qué alternate. Necesitarás construir tu propio cuadro meta para eso.

16 ago 2013 16:56:56
6

Lo siento, no tengo 50 de reputación para añadir un comentario

La respuesta de dot1 es perfecta para incluir enlaces alternativos en la sección head obteniendo el valor de los meta del post, pero ahora necesitas añadir meta keys personalizadas para hreflang y valores alternativos para cada página/post desde la pantalla de edición o crear un meta box para hacerlo.

    // hook del meta box para enlaces alternativos en WordPress
add_action( 'admin_init', 'add_my_link_metabox' );

// Añadir meta box
function add_my_link_metabox() {
    // para posts
    add_meta_box( 'link_meta_box', __( 'Atributos de Enlace Alternativo', 'Your Text Domain' ), 'my_link_data_function', 'post', 'side', 'core' );
    // para páginas
    add_meta_box( 'link_meta_box', __( 'Atributos de Enlace Alternativo', 'Your Text Domain' ), 'my_link_data_function', 'page', 'side', 'core' );
}


// crear una función para mostrar el metabox
function my_link_data_function() {
   global $post, $post_id;
   $alternate = get_post_meta($post->ID, 'alternate', true);
   $hreflang = get_post_meta($post->ID, 'hreflang', true);

   // generar html para el metabox ?>
   <div class="admin-inside-box">
        <p>
            <input type="hidden" name="my_meta_nonce" value="<?php echo wp_create_nonce( basename(__FILE__) ); ?>" />
        </p>

        <p>
            <label>Enlace alternativo</label>
            <input type="text" class="widefat" name="alternate" value="<?php echo $alternate; ?>" />
        </p>

        <p>
            <label>Atributo hreflang</label>
            <input type="text" class="widefat" name="hreflang" value="<?php echo $hreflang; ?>" />
        </p>
   </div>
   <?php
}

   // ahora guardar los datos del metabox al guardar el post
   // hook en la acción save_post
   add_action( 'save_post', 'save_my_link_data' );

  // crear función para guardar valores
  function save_my_link_data() {
     global $post, $post_id;

     // verificar nonce
     if ( !wp_verify_nonce( $_POST['my_meta_nonce'], basename(__FILE__) ) ) {
         return $post_id;
     }

     // comprobar si el usuario actual puede editar el post
     if ( !current_user_can( 'edit_post', $post_id ) ) {
         return $post_id;
     }

     // ahora guardar/actualizar los valores en las meta keys del post
     update_post_meta( $post_id, 'alternate', $_POST['alternate'] );
     update_post_meta( $post_id, 'hreflang', $_POST['hreflang'] );
  }

  // hook para añadir enlace alternativo en wp_head
  add_action('wp_head', 'add_link_in_head');

 function add_link_in_head(){
    global $post;
    if (!empty($post)) {
       $alternate = get_post_meta($post->ID, 'alternate', true);
       $hreflang = get_post_meta($post->ID, 'hreflang', true);
       if (!empty($alternate) && !empty($hreflang)) { ?>
           <link rel="alternate" href="<?php echo $alternate; ?>" hreflang="<?php echo $hreflang; ?>" /><?php
       }
     }
  }

Espero que esto te ayude, puedes cambiar los nombres de las funciones, etc.

16 ago 2013 15:02:32
Comentarios

¿Esto va en functions.php? Lo agregué al principio y obtuve un error: Parse error: syntax error, unexpected '<' in /xxxxxxxxx/functions.php on line 2

moobot moobot
22 ago 2013 12:58:27

editado y ahora funciona, agrega esto y el código de dot1 en functions.php

Anjum Anjum
22 ago 2013 18:48:24

Hmm, estoy obteniendo un error de análisis cada vez que agrego tu código o el de Dot a mi functions.php

moobot moobot
27 ago 2013 10:23:54

@moobot ¿oh error de análisis en qué número de línea? y necesitas agregar ambos códigos, el mío y el de Dot

Anjum Anjum
27 ago 2013 11:31:50

@moobot he editado y combinado los códigos, copia y pega el código de arriba en el functions.php de tu tema y dime si funciona.

Anjum Anjum
27 ago 2013 11:41:57

OK genial, esto parece estar funcionando ahora, pero necesito poder agregar múltiples etiquetas para cada página ya que así es como funcionan las etiquetas rel="alternate". Necesitas hacer referencia a los alternativos y a la página misma.

moobot moobot
21 oct 2013 13:16:29
Mostrar los 1 comentarios restantes
0

Si estás utilizando Transposh (el plugin que he desarrollado) para gestionar tus sitios multilingües, el atributo rel=alternate se agregará automáticamente (con la opción de desactivarlo).

Sin embargo, la razón por la que estoy respondiendo esto es que, en mi experiencia, los resultados de agregar esta etiqueta han sido realmente decepcionantes, por lo que no estoy seguro de que añadirla sea útil en absoluto.

Buena suerte

17 ago 2013 12:17:20