ГлавнаяНе WordPress → Блок произвольных полей в админке WordPress своими руками

Блок произвольных полей в админке WordPress своими руками

Комментариев: 31Блок произвольных полей в админке WordPress своими руками
  • Подскажите как можно вывести все посты относящиеся к определенному значению одного из произвольных полей.

    ОТВЕТИТЬ ↓
    • <?php query_posts('showposts=300&meta_key=zna4enie-proizwolnogo-polya&order=ASC'); ?>
      	<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
      	<?php
      		$infopole = get_post_meta($post->ID, 'zna4enie-proizwolnogo-polya', true); if($infopole !== '') { ?>
      		<?php echo $infopole ?>
      	<?php } ?>
      <?php endwhile; endif; ?>
      <?php rewind_posts(); ?>

      Этот код выводит 300 записей содержащих произвольное поле (zna4enie-proizwolnogo-polya)

      ОТВЕТИТЬ ↓
  • Привет. Не подскажите где мне изменить чтобы заработало. Весь код без изменений кроме этой части:

    ?>
    	<p>text:
    		<textarea type="text" name="extra[zzz_news_select]" style="width:100%;height:50px;"><?php echo get_post_meta($post->ID, 'zzz_news_select', 1); ?></textarea>
    	</p>
    	<p><select name="extra[zzz_news_select]" />
    			<?php $sel_v = get_post_meta($post->ID, 'zzz_news_select', 1); ?>
    			<option value="0">----</option>
    			<option value="1 значение" <?php selected( $sel_v, '1 значение' )?> >1 значение</option>
    			<option value="2 значение" <?php selected( $sel_v, '2 значение' )?> >2 значение</option>
    			<option value="3 значение" <?php selected( $sel_v, '3 значение' )?> >3 значение</option>
    		</select> ← Предустановленные значения</p>
    	<input type="hidden" name="extra_fields_nonce" value="<?php echo wp_create_nonce(__FILE__); ?>" />
    <?php

    в селектах у меня 3 предустановленных значения произвольного поля. а в textarea - тоже самое произвольное поле но для заполнения вручную. И вот с textarea у меня и проблемы - не записывается оно туда потому что в коде стоит проверка на пустой селект и удаляется произвольное поле:

    if( empty($value) )
    			continue delete_post_meta($post_id, $key); // удаляем поле если значение пустое

    Как мне обойти эту проблему. Удалить проверку я не могу - потому что иногда при публикации записи я не выбираю ни селект ни textarea не заполняю...

    ОТВЕТИТЬ ↓
    • Надо как-то определить один раз что это за значение. Так чет ничего мне в голову не приходит. Переменная не может иметь 2 значения одновременно, поэтому форма отправит только 1 значение *unknw*

      Я думаю нужно создать скрытое поле zzz_news_select и Javascriptom вставлять в него значение textarea (если оно не пустое) по событию onСhange/onKeyup и тоже самое сделать для select. А сами эти поля будут просто пустышками (т.е. без name аттрибута), будут как бы вводом значения для созданного скрытого поля.

      ОТВЕТИТЬ ↓
      • Спасибо. Думаю проще тогда будет назначить textarea второму произвольному полю, а выводить уже в цикле произв.поле 1 и произв.поле 2

        Назначил 2 произв.поля и вывожу так:

        <?php query_posts('showposts=70&meta_key=zzz_news_select&orderby=modified&order=desc'); ?>
        <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
        // потом вывожу 2 произвольных поля:
        <?php
        		$infopole = get_post_meta($post->ID, 'zzz_news_select', true); if($infopole !== '') { ?>
        		<?php echo $infopole ?>:
        	<?php } ?>
        <?php
        		$infopole = get_post_meta($post->ID, 'zzz_news_select2', true); if($infopole !== '') { ?>
        		<?php echo $infopole ?>:
        	<?php } ?>
        

        Вот тут загвоздка- вывожу после query_posts произв.поля: "zzz_news_select" и "zzz_news_select2"

        всё хорошо до тех пор, пока у меня не встречается одно лишь zzz_news_select2 - тогда не выводится запись (ну это и понятно в query_posts я выбираю по одному значению zzz_news_select)

        как сделать запрос в массиве не понял. смотрел на кодексе - но там это запутанно

        там написано:

        $args = array(
        	'post_type' => 'product',
        	'meta_query' => array(
        		array(
        			'key' => 'color',
        			'value' => 'blue',
        			'compare' => 'NOT LIKE'
        		),
        		array(
        			'key' => 'price',
        			'value' => array( 20, 100 ),
        			'type' => 'numeric',
        			'compare' => 'BETWEEN'
        		)
        	)
         );
        $query = new WP_Query( $args );

        как применить в свой случай не знаю *mda*

        ОТВЕТИТЬ ↓
  • У меня выдает почему-то при сохранении такую ошибку:
    Warning: Cannot modify header information - headers already sent by (output started at /wp-content/themes/.../functions.php:5) in /wp-includes/pluggable.php on line 868
    с чем это может быть связано, как исправить это?

    ОТВЕТИТЬ ↓
  • Подскажите пожалуйста,
    есть код для вордпресса, там в input нужно внести данные, нажать сохранить и они внесутся в бд. Мне нужно сделать еще на подобии checkbox, что бы пользователь мог выбрать из списка, а не писать вручную.
    Что и куда нужно добавить, помогите пожалуйста. Вот код

    <?php
    
    $new_meta_boxes =
    
    array(	"gmap" => array(
        	"name" => "gmap",
        	"std" => "false",
        	"title" => __('Google Map','decondo'),
        	"description" => __('Check the box if you want to hide the Google map for this property.','decondo'),
        	"type" => 'checkbox'),
    
        	"address" => array(
        	"name" => "address",
        	"std" => "",
        	"title" => __('Адрес','decondo'),
        	"description" => __('Сюда вводится адрес объекта (Без номера дома)','decondo')),
    
        	"state" => array(
        	"name" => "state",
        	"std" => "",
        	"title" => __('Этаж','decondo'),
        	"description" => __('Этаж дома (например 3 в 5 эт. доме)','decondo')), 
    
        	"city" => array(
        	"name" => "city",
        	"std" => "",
        	"title" => __('Тип жилья','decondo'),
        	"description" => __('Новостройка (эконом-класс, бизнем-класс, элит-класс). Вторичное жилье (Сталинка, Брежневка и т.д.)','decondo')),
    
        	"beds" => array(
        	"name" => "beds",
        	"std" => "",
        	"title" => __('Кол-во комнат','decondo'),
        	"description" => __('Кол-во комнат','decondo')),
    
        	"baths" => array(
        	"name" => "baths",
        	"std" => "",
        	"title" => __('Площадь','decondo'),
        	"description" => __('Площадь','decondo')),
    
        	"feet" => array(
        	"name" => "feet",
        	"std" => "",
        	"title" => __('Артикул','decondo'),
        	"description" => __('Ремонт от застройщика, евро ремонт, бабушкино состояние','decondo')),
    
        	"price" => array(
        	"name" => "price",
        	"std" => "",
        	"title" => __('Цена объекта','decondo'),
        	"description" => __('Цена объекта в рублях','decondo')),
    
        	"secs1" => array(
        	"name" => "secs1",
        	"std" => "",
        	"title" => __('Новое меню','decondo'),
        	"description" => __('Проверка нового меню','decondo'))
    
    );
    
    if(!get_option('dco_gmaps_key') || get_option('dco_gmaps_dsp')) unset($new_meta_boxes['gmap']);
    
    function new_meta_boxes() {
    global $post, $new_meta_boxes;
    
    	foreach($new_meta_boxes as $meta_box) {
    
    		$meta_box_value = get_post_meta($post->ID, $meta_box['name'].'_value', true);
    		if($meta_box_value == "") $meta_box_value = $meta_box['std'];
    
    		if($meta_box['name'] == 'img' || $meta_box['name'] == 'gmap') { $meta_full = ' meta-full'; } else { $meta_full = ''; }
    
    		echo'<div class="meta-field'. $meta_full.'">';
    
    		echo'<input type="hidden" name="'.$meta_box['name'].'_noncename" id="'.$meta_box['name'].'_noncename" value="'.wp_create_nonce( plugin_basename(__FILE__) ).'" />';
    
    		echo'<p><strong>'.$meta_box['title'].'</strong></p>';
    
    		if($meta_box['type'] != 'checkbox') {
    
    			echo'<input type="text" name="'.$meta_box['name'].'_value" id="'.$meta_box['name'].'_value" value="'.$meta_box_value.'" /><br />';
    
    			echo'<p><label for="'.$meta_box['name'].'_value">'.$meta_box['description'].'</label></p>';
    
    		} else {
    
    			if($meta_box_value == 'true') {
    				$checked = "checked=\"checked\"";
    			} elseif($meta_box['std'] == "true") {
    					$checked = "checked=\"checked\"";
    			} else {
    					$checked = "";
    			}
    
    			echo'<p><input type="checkbox" name="'.$meta_box['name'].'_value" id="'.$meta_box['name'].'_value" value="true" '.$checked.' /> ';
    
    			echo'<label for="'.$meta_box['name'].'_value">'.$meta_box['description'].'</label></p>';
    
    		}
    
    		echo'</div>';
    
    	} // end foreach
    
    	echo'<br style="clear:both" />';
    
    } // end new_meta_boxes
    
    function create_meta_box() {
    
    	global $theme_name;
    
    	if ( function_exists('add_meta_box') ) {
    		add_meta_box( 'new-meta-boxes', __('Параметры объекта','decondo'), 'new_meta_boxes', 'post', 'normal', 'high' );
    	}
    }
    
    function save_postdata( $post_id ) {
    global $post, $new_meta_boxes;
    
    foreach($new_meta_boxes as $meta_box) {
    
    	// Verify
    	if ( !wp_verify_nonce( $_POST[$meta_box['name'].'_noncename'], plugin_basename(__FILE__) )) {
    		return $post_id;
    	}
    
    	if ( 'page' == $_POST['post_type'] ) {
    		if ( !current_user_can( 'edit_page', $post_id ))
    		return $post_id;
    	} else {
    	if ( !current_user_can( 'edit_post', $post_id ))
    		return $post_id;
    	}
    
    $data = $_POST[$meta_box['name'].'_value'];
    
    if(get_post_meta($post_id, $meta_box['name'].'_value') == "")
    	add_post_meta($post_id, $meta_box['name'].'_value', $data, true);
    elseif($data != get_post_meta($post_id, $meta_box['name'].'_value', true))
    	update_post_meta($post_id, $meta_box['name'].'_value', $data);
    elseif($data == "" || $data == $meta_box['std'] )
    	delete_post_meta($post_id, $meta_box['name'].'_value', get_post_meta($post_id, $meta_box['name'].'_value', true));
    
    	} // end foreach
    } // end save_postdata
    
    add_action('admin_menu', 'create_meta_box');
    add_action('save_post', 'save_postdata');
    
    /*	##################################
       	CUSTOM META BOX (PAGES)
    	################################## */
    
    $new_meta_boxes_2 =
    
    array(	"img" => array(
        	"name" => "img",
        	"std" => "",
        	"title" => __('Main Photo','decondo'),
        	"description" => __('Please enter URL of an image (600x260px) for this page.','decondo'))
    
    );
    
    function new_meta_boxes_2() {
    global $post, $new_meta_boxes_2;
    
    	foreach($new_meta_boxes_2 as $meta_box) {
    
    		$meta_box_value = get_post_meta($post->ID, $meta_box['name'].'_value', true);
    		if($meta_box_value == "") $meta_box_value = $meta_box['std'];
    
    		if($meta_box['name'] == 'img' || $meta_box['name'] == 'gmap') { $meta_full = ' meta-full'; } else { $meta_full = ''; }
    
    		echo'<div class="meta-field'. $meta_full.'">';
    
    		echo'<input type="hidden" name="'.$meta_box['name'].'_noncename" id="'.$meta_box['name'].'_noncename" value="'.wp_create_nonce( plugin_basename(__FILE__) ).'" />';
    
    		echo'<p><strong>'.$meta_box['title'].'</strong></p>';
    
    		if($meta_box['type'] != 'checkbox') {
    
    			echo'<input type="text" name="'.$meta_box['name'].'_value" id="'.$meta_box['name'].'_value" value="'.$meta_box_value.'" /><br />';
    
    			echo'<p><label for="'.$meta_box['name'].'_value">'.$meta_box['description'].'</label></p>';
    
    		} else {
    
    			if($meta_box_value == 'true') {
    				$checked = "checked=\"checked\"";
    			} elseif($meta_box['std'] == "true") {
    					$checked = "checked=\"checked\"";
    			} else {
    					$checked = "";
    			}
    
    			echo'<p><input type="checkbox" name="'.$meta_box['name'].'_value" id="'.$meta_box['name'].'_value" value="true" '.$checked.' /> ';
    
    			echo'<label for="'.$meta_box['name'].'_value">'.$meta_box['description'].'</label></p>';
    
    		}
    
    		echo'</div>';
    
    	} // end foreach
    
    	echo'<br style="clear:both" />';
    
    } // end new_meta_boxes_2
    
    function create_meta_box_2() {
    
    	global $theme_name;
    
    	if ( function_exists('add_meta_box') ) {
    		add_meta_box( 'new-meta-boxes', __('Page Image','decondo'), 'new_meta_boxes_2', 'page', 'normal', 'high' );
    	}
    }
    
    function save_postdata_2( $post_id ) {
    global $post, $new_meta_boxes_2;
    
    foreach($new_meta_boxes_2 as $meta_box) {
    
    	// Verify
    	if ( !wp_verify_nonce( $_POST[$meta_box['name'].'_noncename'], plugin_basename(__FILE__) )) {
    		return $post_id;
    	}
    
    	if ( 'page' == $_POST['post_type'] ) {
    		if ( !current_user_can( 'edit_page', $post_id ))
    		return $post_id;
    	} else {
    	if ( !current_user_can( 'edit_post', $post_id ))
    		return $post_id;
    	}
    
    $data = $_POST[$meta_box['name'].'_value'];
    
    if(get_post_meta($post_id, $meta_box['name'].'_value') == "")
    	add_post_meta($post_id, $meta_box['name'].'_value', $data, true);
    elseif($data != get_post_meta($post_id, $meta_box['name'].'_value', true))
    	update_post_meta($post_id, $meta_box['name'].'_value', $data);
    elseif($data == "" || $data == $meta_box['std'] )
    	delete_post_meta($post_id, $meta_box['name'].'_value', get_post_meta($post_id, $meta_box['name'].'_value', true));
    
    	} // end foreach
    } // end save_postdata
    
    add_action('admin_menu', 'create_meta_box_2');
    add_action('save_post', 'save_postdata_2');
    
    ?>
    ОТВЕТИТЬ ↓
  • спасибо, очень полезная статья

    ОТВЕТИТЬ ↓
  • Здраствуйте. У меня специфический шаблон, в редакторе записи которого нет блока спроизвольными полями. Как самому добавить их? Т.е. обычный блок произвольных полей который присутствует по умолчанию.

    ОТВЕТИТЬ ↓
  • Добрый день,
    скажите есть кто за деньги поможет прикрутить такие поля и поиск по ним.
    это разбираться надо пару дней и проще заплатить....
    спасибо

    ОТВЕТИТЬ ↓
  • А как добавить такие произвольные поля для страниц? Более точнее textarea. Подскажите пожалуйста.

    ОТВЕТИТЬ ↓
Форма комментирования

¤ Вставляйте код кнопкой: "Код" (php, js, html, css, sql);
¤ Выделяйте HTML код кнопкой: "Выделить" (<div>);
¤ Перед отправкой комментария используйте "Превью";
¤ Не пишите спам/бред — бесполезно!

Подписаться на комментарии без комментирования:

X

Забыли пароль?