(英语不是我的语言,如果我解释得不好,我很抱歉)
我的自定义插件从自定义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()
但没有起作用。
我对这方面比较陌生,所以谢谢你的帮助。
最合适的回答,由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。