web-dev-qa-db-ja.com

カスタムメタボックスからラジオボタンメタデータを使用する

PHPを試してみるのが初めてで、チュートリアルを使って私の最初のプラグインを一緒にハックしています。

すべてのWordPressページ(エディタ内)にYes/Noラジオボタンの付いたカスタムメタボックスがあります。

編集 - 元のコードを削除しました。下記参照。

だから..私の質問は、どうやって2つのボタンのうちどのがif()ステートメントを使ってチェックされるのかをチェックすることですか? 'yes'が選択されているWordPressページにスクリプトを追加する予定です。どの値を探しているのか、またはどのようにしてそれを呼び出すのかについて、私は単に確信が持てません。

編集 -

これは私が運なしで今使っているものです。

現在のコード:

<?php
}

/**
 * Adds a meta box to the post editing screen
 */
function prfx_custom_meta() {
add_meta_box( 'prfx_meta', __( 'Meta Plugin', 'prfx-textdomain' ), 'prfx_meta_callback', 'page', 'side', 'high' );
}
add_action( 'add_meta_boxes', 'prfx_custom_meta' );

function is_edit_page($new_edit = null){
global $pagenow;
//make sure we are on the backend
if (!is_admin()) return false;


if($new_edit == "edit")
    return in_array( $pagenow, array( 'post.php',  ) );
elseif($new_edit == "new") //check for new post page
    return in_array( $pagenow, array( 'post-new.php' ) );
else //check for either new or edit
    return in_array( $pagenow, array( 'post.php', 'post-new.php' ) );
}

/**
* Outputs the content of the meta box
*/
function prfx_meta_callback( $post ) {
wp_nonce_field( basename( __FILE__ ), 'prfx_nonce' );
$prfx_stored_meta = get_post_meta( $post->ID );
?>

<p>
<span class="prfx-row-title"><?php _e( 'Is this a thank you page?', 'prfx-textdomain' )?></span>
<div class="prfx-row-content">
    <label for="meta-radio-one">
        <input type="radio" name="meta-radio" id="meta-radio-one" value="radio-one" <?php if ( isset ( $prfx_stored_meta['meta-radio'] ) ) checked($prfx_stored_meta['meta-radio'][0], 'radio-one' ); ?>>
        <?php _e( 'Yes', 'prfx-textdomain' )?>
    </label>
    <br>
    <label for="meta-radio-two">
        <input type="radio" name="meta-radio" id="meta-radio-two" value="radio-two" <?php 
        if (is_edit_page('new')) echo "checked"; 
        else if (isset ( $prfx_stored_meta['meta-radio'] ) ) checked($prfx_stored_meta['meta-radio'][0], 'radio-two' ); 
        else  echo "checked";  ?>>
        <?php _e( 'No', 'prfx-textdomain' )?>
    </label>
</div>
</p>

<?php
}

/**
* Saves the custom meta input
*/

// Pending a fix from WordPress- https://core.trac.wordpress.org/ticket/16972
function prfx_meta_save( $post_id ) {

// Checks save status
$is_autosave = wp_is_post_autosave( $post_id );
$is_revision = wp_is_post_revision( $post_id );
$is_valid_nonce = ( isset( $_POST[ 'prfx_nonce' ] ) && wp_verify_nonce( $_POST[ 'prfx_nonce' ], basename( __FILE__ ) ) ) ? 'true' : 'false';

// Exits script depending on save status
if ( $is_autosave || $is_revision || !$is_valid_nonce ) {
    return;
}

// Checks for input and saves if needed
if( isset( $_POST[ 'meta-radio' ] ) ) {
update_post_meta( $post_id, 'meta-radio', $_POST[ 'meta-radio' ] );
}
}
add_action( 'save_post', 'prfx_meta_save' );
echo '<pre>' . print_r($_POST, true) . '</pre>';

global $post;
$post_id = $post->ID;
get_post_meta( $post->ID, $_POST['meta-radio'], true );
$response_radio = $_POST['meta-radio'];

if ($response_radio=="radio-one") {
    add_action('wp_footer', 'add_this');
    function add_this() {
    echo "The Yes button is selected...";  
}  
} elseif ($response_radio=="radio-two"){  
    add_action('wp_footer', 'add_this');
    function add_this() {
    echo "The No button is selected...";
} 
} else {
    add_action('wp_footer', 'add_this');
    function add_this() {
    echo "No data is passing...";
}
}

ライブページを表示すると(メタボックスにデータが保存されていても)、結果は「データが渡されていません...」になります。

編集 - 私が追加した:echo '<pre>' . print_r($_POST, true) . '</pre>';

下に:add_action( 'save_post', 'prfx_meta_save' );

出力(エディタおよび公開ページ):Array ( )

1
user57393
$response_radio = $_POST['meta-radio'];  

if ($response_radio=="radio-one")  {
    //do your stuff
} elseif ($response_radio=="radio-two") {
    //do other stuff
}

私はこれがあなたが探しているものだと思います

1
EmaOnTheBlock