web-dev-qa-db-fra.com

Utilisation de métadonnées de bouton radio à partir d'une méta-boîte personnalisée

Très nouveau à tenter PHP et pirate mon premier plugin à l'aide de tutoriels ..

J'ai une méta-boîte personnalisée avec un bouton radio Oui/Non sur toutes les pages WordPress (dans l'éditeur).

EDIT- J'ai supprimé le code original. Voir ci-dessous.

Alors .. ma question est, comment puis-je vérifier pour voirlequeldes deux boutons est vérifié en utilisant une instruction if ()? Je prévois d’ajouter un script aux pages WordPress pour lesquelles "oui" est sélectionné. Je ne suis tout simplement pas sûr de la valeur que je devrais rechercher, ni de la manière de l'appeler.

MODIFIER-

C'est ce que j'utilise maintenant sans succès.

Code actuel:

<?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...";
}
}

Le résultat est "Aucune donnée ne passe ..." lors de la visualisation d'une page en direct (même si les données sont en cours d'enregistrement dans la boîte méta).

Edit- J'ai ajouté: echo '<pre>' . print_r($_POST, true) . '</pre>';

Ci-dessous: add_action( 'save_post', 'prfx_meta_save' );

Sortie (éditeur et page publiée): Array ( )

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

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

Je pense que c'est ce que vous cherchez

1
EmaOnTheBlock