web-dev-qa-db-fra.com

Plugin personnalisé - $ post_id dans wp_head

(l'anglais n'est pas ma langue, je suis désolé si je n'explique pas très bien)

Mon plugin personnalisé obtient une URL de la métabox personnalisée et l'ajoute dans le header.php. Mon problème est que je ne peux pas obtenir $post_id dans ma fonction wp_head pour insérer l'URL dans l'en-tête (tout fonctionne correctement avant cela).

Ajoutez mon code depuis mon plugin personnalisé:

add_action( 'add_meta_boxes', 'extra_metabox' );

function extra_metabox () {

add_meta_box( 'extra-metabox', 'Extra Meta Box', 'extra_create_mb', array('page','post'), 'normal', 'core' );
}

function extra_create_mb( $post ){

wp_nonce_field( 'wpe_extra_nonce_save', 'wpe_extra_nonce' );

$meta_alternate = get_post_meta( $post->ID, 'extra_meta_alternate', true );

$html=
    '<table width="100%">
        <tr>
            <td style="width: 20%" valign="top"><label for="extra_meta_alternate">'.__('Alternate', 'extra_custom_alternate_redirect').'</label></td>
            <td>
                <input type="url" id="extra_meta_alternate" name="extra_meta_alternate" pattern="https://.*" value="' . esc_attr( $meta_alternate ) . '" style="width: 100%;">
            </td>
        </tr>
    </table>';


function extra_save_mb( $post_id ) {

$nonce_name   = isset( $_POST['wpe_extra_nonce'] ) ? $_POST['wpe_extra_nonce'] : '';
$nonce_action = 'wpe_extra_nonce_save';

if ( ! isset( $nonce_name ) ) {
    return;
}

if ( ! wp_verify_nonce( $nonce_name, $nonce_action ) ) {
    return;
}

if ( wp_is_post_revision( $post_id ) ) {
    return;
}

update_post_meta( $post_id, 'extra_meta_alternate', sanitize_text_field($_POST['extra_meta_alternate'] ) );

 }
add_action( 'save_post', 'extra_save_mb' );


function extra_head(){
//global $post;
$meta_alternate = get_post_meta( $post->ID, 'extra_meta_alternate', true );
//$meta_alternate = get_post_meta( $post_id, 'extra_meta_alternate', true );
//$meta_alternate = get_post_meta( get_the_ID(), 'extra_meta_alternate', true );
if ( is_page() || is_single() ){

        echo '<link rel="alternate" media="only screen and (max-width:400px)" href="'.$meta_alternate.'" />';   
        }   
}
add_action ('wp_head', 'extra_head');

Mais dans <head></head>, n'imprimez que:

<link rel="alternate" media="only screen and (max-width: 400px)" href="">

De plus, j'essaie d'ajouter global $post dans extra_head() ou get_the_ID() mais cela n'a pas fonctionné.

Je suis relativement nouveau avec cela, alors merci pour l'aide.

1
Exe

Utilisez get_queried_object_id() pour obtenir l'ID de publication de la page/publication actuelle lorsque vous consultez une seule page ou publication, que vous soyez ou non dans la boucle, ou quelle que soit la variable globale $post à ce moment:

if ( is_page() || is_single() ) {
    $post_id        = get_queried_object_id();
    $meta_alternate = get_post_meta( $post_id, 'extra_meta_alternate', true );

    echo '<link rel="alternate" media="only screen and (max-width:400px)" href="' . $meta_alternate. '" />';   
}

Notez que j'ai déplacé les get_queried_object_id() et get_post_meta() à l'intérieur de l'instruction if. En effet, si vous ne vous trouvez pas sur une page ou une publication, l'ID d'objet demandé peut être l'ID d'une catégorie ou d'une balise. Cela garantit que vous n'obtenez l'ID que si vous êtes sur un message ou une page.

1
Jacob Peattie