Aggiungere codice in <head> su base per pagina/post
Esiste un plugin (o un metodo abbastanza semplice) per aggiungere codice alla sezione <head>
su base per pagina/post?
Ho un sito multilingue e devo implementare il markup rel="alternate" hreflang, quindi ho bisogno di un modo per definire rel="alternate"
individualmente su ogni pagina/post.
Ho cercato tra i plugin di WordPress ma finora non ho trovato nulla. Non sono un programmatore quindi non posso creare qualcosa da solo, a meno che non sia piuttosto semplice!
AGGIORNAMENTO
OK, sto provando a creare un campo personalizzato per questa funzionalità, ecco cosa ho fatto finora:
<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;
?>" />
Questo funziona bene se voglio aggiungere solo una pagina alternativa. Quando provo ad aggiungerne altre, viene aggiunta solo un'istanza di rel="alternate"
, con l'ultima aggiunta che sostituisce l'originale.
Inoltre, su tutte le pagine in cui non ho definito questi campi personalizzati, ottengo un tag vuoto:
<link rel="alternate" href="" hreflang="" />
Qualcuno può indicarmi la direzione giusta per correggere questi problemi?

Come hai detto su base per pagina/articolo, questo funzionerebbe per ogni articolo
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
}
}
}
Se non ci sono $alternate e $hreflang allora non verrà aggiunto alcun link.

Utilizza il codice seguente nella sezione <head>
:
<?php
add_action('wp_head', 'your_function');
function your_function() {
//il tuo codice andrà qui
}
?>
Per maggiori informazioni puoi visitare qui.

Non so come stai salvando i tuoi dati, ma assumendo che tu stia utilizzando il meta box integrato "Campi personalizzati", le tue pagine alternate multiple dovrebbero arrivare come 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');
Tuttavia, vedo un potenziale problema. Se vuoi avere più coppie di alternate
/hreflang
associate per post, allora devi salvarle come coppie nel database. Altrimenti, non ci sarà modo di dire quale hreflang
corrisponde a quale alternate
. Dovrai costruire il tuo meta box personalizzato per questo.

scusa per questo, non ho 50 reputazione per aggiungere un commento
La risposta di dot1 è perfetta per includere il link alternativo nella sezione head ottenendo il valore dai post meta, ma ora devi aggiungere chiavi meta personalizzate per hreflang e valori alternativi per ogni pagina/post dalla schermata di modifica del post o creare un meta box per farlo.
// hook del meta box per i link alternativi in WordPress
add_action( 'admin_init', 'add_my_link_metabox' );
// Aggiungi meta box
function add_my_link_metabox() {
// per i post
add_meta_box( 'link_meta_box', __( 'Attributi Link Alternativo', 'Your Text Domain' ), 'my_link_data_function', 'post', 'side', 'core' );
// per le pagine
add_meta_box( 'link_meta_box', __( 'Attributi Link Alternativo', 'Your Text Domain' ), 'my_link_data_function', 'page', 'side', 'core' );
}
// crea una funzione per visualizzare il 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);
// genera html per il 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>Link alternativo</label>
<input type="text" class="widefat" name="alternate" value="<?php echo $alternate; ?>" />
</p>
<p>
<label>Link hreflang</label>
<input type="text" class="widefat" name="hreflang" value="<?php echo $hreflang; ?>" />
</p>
</div>
<?php
}
// ora salva i dati del metabox al salvataggio del post
// hook nell'azione save_post
add_action( 'save_post', 'save_my_link_data' );
// crea funzione per salvare i valori
function save_my_link_data() {
global $post, $post_id;
// verifica il nonce
if ( !wp_verify_nonce( $_POST['my_meta_nonce'], basename(__FILE__) ) ) {
return $post_id;
}
// controlla se l'utente corrente può modificare il post
if ( !current_user_can( 'edit_post', $post_id ) ) {
return $post_id;
}
// ora salva/aggiorna i valori nelle chiavi meta del post
update_post_meta( $post_id, 'alternate', $_POST['alternate'] );
update_post_meta( $post_id, 'hreflang', $_POST['hreflang'] );
}
// hook per il link alternativo in 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
}
}
}
spero che questo ti aiuti, puoi cambiare i nomi delle funzioni ecc.

Questo va nel file functions.php? L'ho aggiunto all'inizio e ho ottenuto un errore: Parse error: syntax error, unexpected '<' in /xxxxxxxxx/functions.php on line 2

modificato e ora funziona, aggiungi questo e il codice di dot1 nel functions.php

Hmm, ottengo un errore di parsing ogni volta che aggiungo il tuo codice o quello di Dot nel mio functions.php

@moobot oh errore di analisi su quale numero di riga? e devi aggiungere entrambi i codici, il mio e quello di Dot

@moobot ho modificato e combinato i codici, copia e incolla il codice sopra nel functions.php del tuo tema e fammi sapere.

Se stai utilizzando Transposh (il plugin che ho sviluppato) per gestire i tuoi siti multilingue, il rel=alternate verrà aggiunto automaticamente (con l'opzione per disabilitarlo).
Tuttavia, il motivo per cui rispondo è che, nella mia esperienza, i risultati dell'aggiunta di questo tag sono stati davvero deludenti, quindi non sono sicuro che aggiungerlo sia utile.
Buona fortuna
