scottb
  • 0
Гуру

WordPress 3 искажает значения моих пользовательских мета-полей при сохранении

  • 0

В моей теме есть код, который размещает настраиваемое мета-поле в интерфейсе редактора страниц для переключения атрибутов noindex и/или nofollow на страницу.

Это простая маленькая сделка с двумя флажками, один говорит noindex, другой говорит nofollow.

Они работают безупречно во всех версиях WP до 3.0.1.

Я обнаружил, что в 3.0.1 значения флажков не сохраняются. Независимо от того, что я делаю, они всегда появляются непроверенными, и значения также не передаются в базу данных (это не просто отчет о непроверенных в интерфейсе, он никогда не отправляет значения в БД)

Я не понимаю, что отличается и как заставить мой код работать с 3.0.1.

Кто-нибудь знает, что могло измениться, чтобы эти значения флажков не проходили при обновлении страницы в WP 3.0.1?

// ===================
// = POST OPTION BOX =
// ===================

add_action('admin_menu', 'my_post_options_box');

function my_post_options_box() {
    if ( function_exists('add_meta_box') ) { 
        add_meta_box('categorydiv', __('Page Index Options'), 'post_categories_meta_box_modified', 'page', 'side', 'high');
    }
}

//adds the custom categories box
function post_categories_meta_box_modified($post) {
global $post, $noindexCat, $nofollowCat;
    $noindexCat = get_cat_ID('noindex');
    $nofollowCat = get_cat_ID('nofollow');
    if(in_category("noindex")){ $noindexChecked = " checked='checked'";} 
    if(in_category("nofollow")){ $nofollowChecked = " checked='checked'";}
?>
<div id="categories-all" class="ui-tabs-panel">
    <ul id="categorychecklist" class="list:category categorychecklist form-no-clear">
        <li id='category-<?php echo $noindexCat ?>' class="popular-category"><label class="selectit"><input value="<?php echo $noindexCat ?>" type="checkbox" name="post_category[]" id="in-category-<?php echo $noindexCat ?>"<?php echo $noindexChecked ?> /> noindex</label></li> 
        <li id='category-<?php echo $nofollowCat ?>' class="popular-category"><label class="selectit"><input value="<?php echo $nofollowCat ?>" type="checkbox" name="post_category[]" id="in-category-<?php echo $nofollowCat ?>"<?php echo $nofollowChecked ?> /> nofollow</label></li> 
        <li id='category-1' class="popular-category" style="display:none;"><label class="selectit"><input value="1" type="checkbox" name="post_category[]" id="in-category-1" checked="checked"/> Uncategorized</label></li> 
    </ul>
</div>
<?php
}
Share
  1. Прежде всего, это не использование пользовательских метаданных сообщений… вы пытаетесь получить категории и использовать наличие этих категорий для установки флажков. Я также не вижу никакого сценария для сохранения значений после того, как вы их щелкнули… Когда это сработало, я предполагаю, что это было очень хакерское решение, поэтому я не удивлен, что оно нестабильно и сломалось.

    Тем не менее, вы можете использовать пользовательские метаданные постов, чтобы делать то, что вы хотите. Вместо этого используйте следующий скрипт:

    // ===================
    // = POST OPTION BOX =
    // ===================
    
    add_action('admin_menu', 'my_post_options_box');
    
    function my_post_options_box() {
        if ( function_exists('add_meta_box') ) { 
            add_meta_box('categorydiv', __('Page Index Options'), 'post_categories_meta_box_modified', 'page', 'side', 'high');
        }
    }
    
    //adds the custom categories box
    function post_categories_meta_box_modified() {
        global $post;
        if( get_post_meta($post->ID, '_noIndex', true) ) $noindexChecked = " checked='checked'";
        if( get_post_meta($post->ID, '_noFollow', true) ) $nofollowChecked = " checked='checked'";
    ?>
    <div id="categories-all" class="ui-tabs-panel">
        <ul id="categorychecklist" class="list:category categorychecklist form-no-clear">
            <li id='noIndex' class="popular-category"><label class="selectit"><input value="noIndex" type="checkbox" name="chk_noIndex" id="chk_noIndex"<?php echo $noindexChecked ?> /> noindex</label></li> 
            <li id='noFollow' class="popular-category"><label class="selectit"><input value="noFollow" type="checkbox" name="chk_noFollow" id="chk_noFollow"<?php echo $nofollowChecked ?> /> nofollow</label></li>  
        </ul>
    </div>
    <?php
    }
    
    function save_post_categories_meta($post_id) {
        if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return $post_id;
    
        $noIndex = $_POST['chk_noIndex'];
        $noFollow = $_POST['chk_noFollow'];
    
        update_post_meta( $post_id, '_noIndex', $noIndex );
        update_post_meta( $post_id, '_noFollow', $noFollow );
    
        return $post_id;
    }
    
    add_action('save_post', 'save_post_categories_meta');
    

    Это сохранит логические флаги в настраиваемых мета-полях сообщений «noIndex» и «noFollow», извлечет значения этих полей для использования в вашем настраиваемом мета-поле и позволит вам легко получить к ним доступ в другом месте вашего сайта. Просто используйте get_post_meta( $post->ID, 'meta-name', true ), чтобы получить их.

    • 0
  2. Я также хотел бы предложить использовать WPAlchemy Meta Box (класс php, который я создал) для создания ваших мета-боксов…

    • 0

Оставить ответ

You must login to add an answer.