Wp_head中的自定义插件-$post_id

时间:2018-10-17 作者:Exe

(英语不是我的语言,如果我解释得不好,我很抱歉)

我的自定义插件从自定义metabox获取URL并将其添加到标题中。我的问题是$post_id 在我的wp_head 函数在标头中插入URL(在此之前一切正常)。

从自定义插件添加我的代码:

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\');
但在<head></head> 仅打印:

<link rel="alternate" media="only screen and (max-width: 400px)" href="">
我还尝试添加global $post 在…内extra_head()get_the_ID()但没有起作用。

我对这方面比较陌生,所以谢谢你的帮助。

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

使用get_queried_object_id() 查看单个页面或帖子时获取当前页面/帖子的帖子ID,无论您是否在循环中,或全局$post 变量恰好位于该时刻:

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. \'" />\';   
}
请注意,我移动了get_queried_object_id()get_post_meta() 到if语句内部。这是因为如果您不在页面或帖子上,查询的对象ID可能是类别或标记的ID。这可以确保您仅在帖子或页面上获取ID。

结束

相关推荐