Denna delen av 99 uppdateras inte längre utan har arkiverats inför framtiden som ett museum.
Här kan du läsa mer om varför.
Mac-nyheter hittar du på Macradion.com och forumet hittar du via Applebubblan.

meta-fält och ajax i WP

Tråden skapades och har fått 5 svar. Det senaste inlägget skrevs .
1

Jag pysslar med metafält i mina post-types i wordpress och till det vill jag lägga till lite Ajax men får problem med outputen..

Ajax-anropet som hämtar data från get_released_info.php

function ShowTab(postId) {
var request = new requestObject();
request.open("GET", "/get_released_info.php?id="+postId, true);
request.onreadystatechange = function() {
if(request.readyState == 4) {
document.getElementById("about").innerHTML = "ReadyState: " + request.responseText + "";
}
}
request.send(null);
}

Infon som visas utan problem utan ajax

if(isset($simple_textarea)){
$meta = $simple_textarea->the_meta();
echo apply_filters('meta_content',$simple_textarea->get_the_value('malort_released'));
$fields = array(null,"Om boken", "Om författaren", "Om CDn");

$infoarray = array();
$infoarray[] = array("Om boken", $meta['about_book']);
$infoarray[] = array("Om författaren", $meta['about_author']);
$infoarray[] = array("Om CDn", $meta['about_cd']);

$counter = 1;

foreach($infoarray as $array) {
if($array[1] != "") {
// echo "".$array[0]."";
echo "".$array[0]."";
// wp_enqueue_script( 'json-form' );
}
$counter++;
}

//RESPONS FROM LINKS
$info = $_GET['about'];
switch ($info)
{
case 1:
$active = "active";
echo "".wpautop($meta['about_book'])."";
break;
case 2:
$active = "active";
echo "".wpautop($meta['about_author'])."";
break;
case 3:
$active = "active";
echo "".wpautop($meta['about_cd'])."";
break;
default :
$active = "active";
echo "".wpautop($meta['about_book'])."";

}

}else{
echo "Ingen extra info";
}

Den infon skickas till get_released_info.php såhär:

if (file_exists("../../../wp-load.php"))
{
require_once("../../../wp-load.php");
}

$released_id = $_GET['id'];
echo $released_id;
$test = get_post_meta($released_id);
var_dump($test);

if($test){
echo "Data: " . $test["_custom_meta"][0];

}else{
echo "empty";
}

Och det här blir resultatet:
540array(4) { ["_edit_lock"]=> array(1) { [0]=> string(12) “1350549304:1″ } ["_edit_last"]=> array(1) { [0]=> string(1) “1″ } ["_thumbnail_id"]=> array(1) { [0]=> string(3) “541″ } ["_custom_meta"]=> array(1) { [0]=> string(2075) “a:2:{s:10:”about_book”;s:1242:”fält nummer 1“;}” } }“;s:8:”about_cd”;s:764:”Fält nummer två“;}” } }

Hur kan jag få ut bara inlägget jag har valt med switchen?

Jag har lite svårt att förstå vad som blir fel eller hur koden går. Antar att sista koden är get_released_info.php, men vad är den andra koden från?
Men om jag ser rätt så anropar du get_post_meta i get_released_info,php, den bör ha två parametrar, den andra för att specifiera vilken meta du vill ha ut.

Tack för ditt svar!

Den första är från posten, id't för den där 540. I den har jag lagt upp metafält i tabbar som ska bytas med ajax, det ville sig inte med json så jag har lagt det i en separat fil där infon ska laddas.

Vad är det då jag ska ha som den andra parametern? Jag vill ju att det som valdes i switchen ska laddas, hur vet jag vilken det är?
Jag testade med att skriva in 'about_book');

$test = get_post_meta($released_id, 'about_book');

och fick svaret "ReadyState: 540array(0) { } empty"

Jag testade att istället för 'about_book' sätta in $simple_textarea (det wpalchemy-setupen kallar allt) men fick då svaret;

"Warning: Illegal offset type in isset or empty in /Users/Vide/Sites/wordpress/wp-includes/meta.php on line 292
array(0) { } empty"

Jag tror jag inte riktigt har förstått det där med de parametrarna, du får gärna förklara ytterliggare hur jag ska ge mig an det!

Det mest fördelaktiga med innehåll i tabbar är väl i de flesta fall att läsa in dem först i sidan och sedan bara dölja och visa innehåll i dem. Då får man med allt innehåll direkt vilket minskar laddtiderna totalt sett, och sökmotorerna har möjlighet att läsa allt. Men jag antar att du vill ha det med ajax och då ska vi väll lösa det. Så här tänker jag att man gör för att få det att fungera:

I inläggen antar jag att du har använt dig av standard-rutorna (http://info.template-help.com/help/wp-content/uploads/2011/04/wp-custom-fields-1.jpg) där name är t.ex. "about_book".

På sidan kan det vara lämpligt att formatera länkarna till: <a href="#" name="about_book" class="tab">Visa information om boken</a>.

Nu kan du göra ett javascript som hämtar alla länkar med klassen "tab" och ger de en funktion som först läser av name-attributet och sedan gör en request '/get_released_info.php?id="+postId+"&meta="+name'.

Som där i princip bara behöver köra get_post_meta($postid, $meta); förutom att hämta in wordpressfunktionerna såklart. Så att den har tillgång till databas etc. Lämpligtvis gör man en template som heter get-book-information och skapar en page som använder den som template. Då ingår automatiskt hela wordpress-paketet så att säga. Och det är ingen skillnad att skicka GET till den senare.

Hoppas detta kan ge dig några ledtrådar. Själv var det länge sedan jag använde ajax (vilket inte beror på tekniken utan mitt arbete) men det ska väl gå på ett ungefär.

Nja.. jag använder WPAlchemy MetaBox PHP Class

Just den där javascript-biten hängde jag inte med på.. är det för att det inte ska bli tjafs i get_released_info.php?
&meta="+name' -biten har jag redan testat, som ett hidden field i fältet som skriver ut infon, men det renderar en tom array när jag skriver get_post_meta($postid, $meta); , ska jag placera det gömda fältet annorlunda?

gjorde en page av det men det går ändå inte..

Senast redigerat 2012-10-20 11:02

Det är helt löst nu, underbart!
Ajax:

request.open("GET", "<?php echo get_bloginfo('template_directory');?>/get_released_info.php?id="+postId +"&section="+section, true);

Länk till fälten:

"<li id='$active'><a onClick='ShowTab({$released_id}, {$counter});return false;'>".$array[0]."</a></li>";

Fält

$args = array('post_type' => 'malort_released', 'p' => $released_id);
$released_query = new WP_Query( $args); 
if($released_query->have_posts()) : $released_query->the_post(); 
//infon

$args = array('post_type' => 'malort_released', 'p' => $released_id);
$released_query = new WP_Query( $args); 
if($released_query->have_posts()) : $released_query->the_post(); 
endif;
1
Bevaka tråden