2016-08-23 2 views
0

私がしようとしているのは、二重言語のウェブサイトです。この特定の言語PapiamentoはWordpressでサポートされていません。したがって、クライアントは、英語とPapの2つの別々のページを作成しなければなりませんでした。私がしたことは、各ページの英語またはPapメニューを表示するようにコード化することでした。 header.phpの中にこのようMetaboxチェックボックスを使用してページIDを配列に追加するにはどうすればよいですか?

、:

<?php 

    if(is_page(array('salon-and-spa-pap', 'tocante-nos', 'testimonio', 'tuma-contacto-cu-nos', 'galeria', 'tratamentonan-di-masahe', 'tratamentonan-spa-di-curpa', 'servicionan-di-boda', 'tratamentonan-spa-di-cara', 'wowo-lip-nek', 'cuido-di-man', 'tratamento-di-huna', 'tratamento-di-huna-di-pia', 'cuido-di-pia', 'salon-p', 'spa-etiquette-pap', 'wax-p', 'reserva-un-tratamento'))) { 
     wp_nav_menu(array('theme_location' => 'menu_top_pap')); 
    } else { 
     wp_nav_menu(array('theme_location' => 'secondary-menu')); 
    } 

?> 

しかし、問題は、クライアントが別のページスラッグに彼女が新しいページを作成するたびに追加するheader.phpのために戻って維持する必要がありますということです。したがって、私はそのためのMetaboxプラグインを作成しました。私はMetaboxのチェックボックスを作って、ページがPapiamento言語を対象とするたびに、クライアントはそのボックスをチェックするだけで、上記のコードにページIDまたはスラッグのいずれかを追加することができます。

私が探していたものに似ているかもしれないが、それは私のためにはうまくいかなかったという別の質問が見つかった(https://wordpress.stackexchange.com/questions/71043/listing-pages-with-checkboxes-in-a-metabox-and-saving-them)。

私の代謝機能は、この記事(http://themefoundation.com/wordpress-meta-boxes-guide/)に基づいています。

<?php 
function prfx_custom_meta() { 
    add_meta_box('prfx_meta', __('Papiamento Page Box', 'prfx-textdomain'), 'prfx_meta_callback', 'page', 'normal', 'low'); 
} 
add_action('add_meta_boxes', 'prfx_custom_meta'); 

function prfx_meta_callback($post) { 
    wp_nonce_field(basename(__FILE__), 'prfx_nonce'); 
    $prfx_stored_meta = get_post_meta($post->ID); 
    $checkfield = maybe_unserialize(get_post_meta($post->ID, "checkfield", true)); 
    ?> 


    <p> 
    <span class="prfx-row-title"><?php _e('Pap Checkbox', 'prfx-textdomain')?></span> 
    <div class="prfx-row-content"> 
     <label for="meta-checkbox"> 
      <input type="checkbox" name="checkfield[]" id="page_<?php echo $page->ID; ?>" value="<?php echo $page->ID; ?>" <?php if (in_array($page->ID, (array) $checkfield)) { ?> checked <?php } ?>/> <label for="page_<?php echo $page->ID; ?>"><?php echo $page->post_title; ?> 
      <?php _e('Check if this page is Papiamento', 'prfx-textdomain')?> 
     </label> 
    </div> 
</p> 
    <?php 
} 

/** 
* Saves the custom meta input 
*/ 
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 sanitizes/saves if needed 

    // Checks for input and saves 
    if(isset($_POST[ 'checkfield' ])) { 
     update_post_meta($post_id, "checkfield", $_POST['checkfield']); 
    } 

} 
add_action('save_post', 'prfx_meta_save'); 

と、このようにheader.phpの中にページIDを呼び出す:

<?php 

    if(in_array($page->ID, (array) $checkfield)) { 
     wp_nav_menu(array('theme_location' => 'menu_top_pap')); 
    } else { 
     wp_nav_menu(array('theme_location' => 'secondary-menu')); 
    } 

?> 

しかし、それは動作しませんでした。助けてください!

*************** UPDATE *************** 私は関数prfx_meta_callbackを編集しようとしています($ post)しかし成功なし。ここで私は、変更しようとしている最新のコードは、私はPAPが、その後、すべてのページに未チェックのPap、チェックし、そうでない場合ならば、そのようにそれを作るためにしようとしてきた...

function prfx_meta_callback($post) { 
    wp_nonce_field(basename(__FILE__), 'prfx_nonce'); 
    $checkfield = maybe_unserialize(get_post_meta($post->ID, "checkfield", true)); 

    $page = get_pages(); 
    $prfx_stored_meta = get_post_meta($post->ID); 

    ?> 

    <p> 
    <span class="prfx-row-title"><?php _e('Pap Checkbox', 'prfx-textdomain')?></span> 
    <div class="prfx-row-content"> 

     <label for="page_<?php echo $page->ID; ?>"> 

     <input id="page_<?php echo $page->ID; ?>" type="checkbox" name="checkfield[]" value="<?php echo $page->ID; ?>" <?php if (isset($checkfield [ ?>'<?php echo $page->ID; ?>'<?php ])) checked($checkfield[ ?>'<?php echo $page->ID; ?>'<?php ][0], '<?php echo $page->ID; ?>'); ?>/> <?php _e('Check if this page is Papiamento', 'prfx-textdomain')?></label> <br> 

    </div> 
</p> 

<?php 

です。

答えて

0

metaboxが適切にチェックボックスの設定を保存している場合、あなたはheader.phpにチェックをするために、次のコードを使用することができます。

if (in_array(get_the_ID(), get_post_meta(get_the_ID(), 'checkfield', true))) { 
    wp_nav_menu(array('theme_location' => 'menu_top_pap')); 
} else { 
    wp_nav_menu(array('theme_location' => 'secondary-menu')); 
} 
+0

はそれをしようとしたが、それは警告「警告を与える:in_array()は、に、パラメータ2を期待します配列でなければなりません。/home/bizzlebo/public_html/atoh/wp-content/themes/atoh-child/header.php 91行目の –

+0

で指定された文字列です。また、チェックボックスは機能しないようです。チェックする必要があるページではなく、すべてのページがチェックされます。 –

+0

チェックフィールドが上記のコードに文字列として保存されている可能性が最も高いです。自分のコードのget_post_meta部分をvar_dumpして、データの格納形式を確認することができます。コンマで区切られた文字列の場合、 'explode()'して配列にすることができます。 – inderpreet99

関連する問題