【问题标题】:Output textarea with wp_head function使用 wp_head 函数输出 textarea
【发布时间】:2016-03-01 22:29:48
【问题描述】:

我正在尝试在我的 Wordpress 网站的 head 标记之间回显 Metabox 文本区域中的值,以便网站所有者可以插入页面单独的脚本。

我已经成功创建了我的元框:

<?php
$post_id_post = isset($_POST['post_ID']) ? $_POST['post_ID'] : '' ;
$post_id = isset($_GET['post']) ? $_GET['post'] : $post_id_post ;

if ( ! function_exists( 'onm_head_add_meta' ) ){
    function onm_head_add_meta(){
        $types = array( 'post', 'page', 'courses', 'wiki', 'press' );
        foreach( $types as $type ) {
            add_meta_box('head-metabox-code', __('Scripts', 'onm_textdomain' ), 'onm_sitewide_meta_box', $type, 'normal', 'low'); 
        }
    }
}
add_action("admin_init", "onm_head_add_meta");

//Create area for extra fields
if ( ! function_exists( 'onm_sitewide_meta_box' ) ){
    function onm_sitewide_meta_box( $post ){ 

        $custom = get_post_custom();
        $head_scripts = isset($custom["head_scripts"][0])?$custom["head_scripts"][0]:'';

        // We'll use this nonce field later on when saving.  
        wp_nonce_field( 'my_meta_box_nonce', 'meta_box_nonce' );
        ?>  

        <textarea name="head_scripts" type="text" class="widefat" cols="50" rows="3"/><?php echo esc_attr($head_scripts); ?></textarea>
        <p><?php _e('The code in the above textfield will be added between the <code>&lt;head&gt;&lt;/head&gt;</code> tags of the website.', 'onm_textdomain' ); ?></p>

        <?php
    }
}

if ( ! function_exists( 'onm_save_page_meta_box' ) ){
    function onm_save_page_meta_box( $post_id ){ 
        // Bail if we're doing an auto save  
        if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
            return; 
        }
        // if our nonce isn't there, or we can't verify it, bail 
        if( !isset( $_POST['head_scripts'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'my_meta_box_nonce' ) ) {
            return; 
        }
        // if our current user can't edit this post, bail  
        if( !current_user_can( 'edit_pages' ) ) {
            return;  
        }
        // now we can actually save the data        
        if( isset( $_POST['head_scripts'] ) )  {
            update_post_meta( $post_id, 'head_scripts', esc_attr( $_POST['head_scripts'] ) ); 
        }
    }
    }

add_action( 'save_post', 'onm_save_page_meta_box' ); 

现在我尝试从头标签之间的 Metabox 中输出值,如下所示:

if ( ! function_exists( 'onm_wp_head' ) ){
    function onm_wp_head() {
        $head_scripts_meta = get_post_meta( get_the_ID(), 'head_scripts' , TRUE );
        if ( $head_scripts_meta != '' ) {
            echo $head_scripts_meta, "\n";
        }
    }
}
add_action( 'wp_head', 'onm_wp_head' );

但在我的网站上,这会导致在我的开始正文标记之后立即输出 Metabox(请查看下面的示例或this 打印屏幕)。

<head></head>
<body>
    "<script type="text/javascript">Test</script>"

在我的头标签中不是一个很好的脚本。这很奇怪,因为当我按如下方式测试脚本时,它就像一个魅力:

if ( ! function_exists( 'onm_wp_head' ) ){
    function onm_wp_head() {
        $head_scripts_meta = '<script type="text/javascript">Test</script>';
        if ( $head_scripts_meta != '' ) {
            echo $head_scripts_meta, "\n";
        }
    }
}
add_action( 'wp_head', 'onm_wp_head' );

我认为这与文本区域有关,不是吗?任何想法如何解决这个问题?已经谢谢大家了!

【问题讨论】:

  • 对不起,但至少对我来说,你的函数的实际输出并不清楚。你能提供前一段代码的结果 HTML 吗? :)
  • 亲爱的@FelipeElia,我已经用实际输出更新了我的问题。

标签: php wordpress textarea meta-boxes


【解决方案1】:

问题是 get_the_ID() 在您的脑海中不起作用(直到调用 the_post 才会起作用)。

修改如下:

if ( ! function_exists( 'onm_wp_head' ) ){
    function onm_wp_head() {
        global $post;
        $head_scripts_meta = get_post_meta( $post->ID, 'head_scripts' , TRUE );
        if ( $head_scripts_meta != '' ) {
            echo $head_scripts_meta, "\n";
        }
    }
}

add_action( 'wp_head', 'onm_wp_head' );

【讨论】:

  • Cale,感谢您的回答,但这不起作用。元框很好地回响。但它显示元框也如下:Image。在我的身体之上。所以它不会作为真正的脚本或样式行返回。
  • 嗨尼克 - 所以让我们明确一点:根据你的形象,它确实有效 - 我解决了你问的问题,是吗?现在您发现了一个后续问题,即条目被修改以呈现 html 实体而不是原始 html?如果是这种情况,那么您应该提出一个新问题。 (有关如何呈现文本区域以及如何保存文本区域的所有详细信息对于回答该问题都很重要)。
  • 嗨,凯尔,很抱歉在这种情况下不清楚。我想我很清楚我想要在 head 标签之间的 Metabox 文本区域。在目前的情况下,情况并非如此。但你是对的,我想要的是获取 mdfied 的条目,以便它呈现 html 实体而不是原始 html。
  • 嗨尼克 - 你是说这个 在 head 标签之间呈现?你确定 - 你“查看源代码”吗?我认为目前的问题是(a)它在头标签之间呈现(这就是 wp_head 所做的),以及(b)因为它不在 &lt;script&gt; 标签内,而是在 html 实体中,它是可见的。我可以帮助解决这个问题,但如果你发现这个答案有帮助,如果你至少可以投票,那就太好了。
  • 您确定在您的 head 标签之间调用了“wp_head”吗?检查您的主题 header.php 文件。
【解决方案2】:

一段时间后我找到了解决方案。我必须在标题中的输出之前删除斜杠。所以我的功能变成了以下然后它起作用了:

if ( ! function_exists( 'onm_script_wp_head' ) ){
    function onm_script_wp_head() {
        $head_scripts_meta = stripslashes(get_post_meta( get_the_ID(), 'head_scripts' , TRUE ));
        if ( $head_scripts_meta != '' ) {
            echo $head_scripts_meta, "\n";
        }
    }
}
add_action( 'wp_head', 'onm_script_wp_head' );

感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-22
    • 2018-03-29
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2011-03-28
    相关资源
    最近更新 更多