admin-ajax.php připojením stavového kódu k odpovědi ajax
<p>píšu plugin, který používá ajax (jquery s formulářovým pluginem) prostřednictvím formuláře a funkce php vrací odpověď json.</p><pre><code>add\_action( 'wp\_ajax\_bubbly-upload', 'bubbly\_upload\_submit' ); function bubbly\_upload\_submit() { // generate the response $response = json\_encode( array( 'success' =&gt; true ) ); // response output header( "content-type: application/json" ); echo $response; } </code></pre><p>ve firefoxu nebyla spuštěna žádná obslužná rutina odezvy jquery a bylo otevřeno dialogové okno pro uložení s odpovědí json. kdybych vrátil kód html, neměl bych problém. v každém případě však byla na konci mé odpovědi připojena hodnota „0“. po nějaké kopání to vypadá, že jquery nespustí handler, pokud je json reponse neplatný. toto '0' přidané na konec způsobí, že json je neplatný.</p><p>pokud se podívám do kódu <code>admin-ajax.php</code>, vidím toto:</p><pre><code>default : do\_action( 'wp\_ajax\_' . $\_post['action'] ); die('0'); break; endswitch; </code></pre><p> <a href="http://us.php.net/manual/en/function.exit.php">php docs for die</a> říkají, že pokud je předaný parametr řetězec, bude vytištěn těsně před ukončením, pokud se jedná o celé číslo, bude nelze tisknout.</p><p>bez hackování jádra, existuje způsob, jak se mohu tomuto problému vyhnout a stále používat json? je to také chyba, protože nevidím, jak by bylo žádoucí přidat nulu na konec každé odpovědi ajax ...</p>
<p>vložte <code>die();</code> do své funkce:</p><pre><code>add\_action( 'wp\_ajax\_bubbly-upload', 'bubbly\_upload\_submit' ); function bubbly\_upload\_submit() { // generate the response $response = json\_encode( array( 'success' =&gt; true ) ); // response output header( "content-type: application/json" ); echo $response; die(); } </code></pre><p>reference: <a href="http://codex.wordpress.org/ajax\_in\_plugins">wordpress codex, ajax v pluginech</a> </p>
<p>zde je kód, který používám vždy, když nastavím nový blog wordpress:</p><p>custom admin footer text</p><pre><code>// customize admin footer text function custom\_admin\_footer() { echo '&lt;a href="http://www.netconstructor.com/"&gt;website design by netconstructor, inc.&lt;/a&gt;'; } add\_filter('admin\_footer\_text', 'custom\_admin\_footer'); </code></pre><p>vymazat verze informací z head krmiv</p><pre><code>// remove version info from the head of feeds function complete\_version\_removal() { return ''; } add\_filter('the\_generator', 'complete\_version\_removal'); </code></pre><p>odstraňte junk z hlavy stránk veřejných stránků</p><pre><code>// remove junk from the header of public website pages remove\_action('wp\_head', 'rsd\_link'); remove\_action('wp\_head', 'wp\_generator'); remove\_action('wp\_head', 'feed\_links', 2); remove\_action('wp\_head', 'index\_rel\_link'); remove\_action('wp\_head', 'wlwmanifest\_link'); remove\_action('wp\_head', 'feed\_links\_extra', 3); remove\_action('wp\_head', 'start\_post\_rel\_link', 10, 0); remove\_action('wp\_head', 'parent\_post\_rel\_link', 10, 0); remove\_action('wp\_head', 'adjacent\_posts\_rel\_link', 10, 0); </code></pre><p>odstranit oznámení o wordpressu pro všechny uživatele except sysadmin</p><pre><code>// remove the wordpress update notification for all users except sysadmin global $user\_login; get\_currentuserinfo(); if ($user\_login !== "sysadmin") { add\_action( 'init', create\_function( '$a', "remove\_action( 'init', 'wp\_version\_check' );" ), 2 ); add\_filter( 'pre\_option\_update\_core', create\_function( '$a', "return null;" ) ); } </code></pre><p>uživatelský admin logos:</p><pre><code>// custom admin login header logo function my\_custom\_login\_logo() { echo '&lt;style type="text/css"&gt; h1 a { background-image:url('.get\_bloginfo('template\_directory').'/images/excitesteps-login-logo.png) !important; } &lt;/style&gt;'; } add\_action('login\_head', 'my\_custom\_login\_logo'); // custom admin logic header logo add\_action('admin\_head', 'my\_custom\_logo'); function my\_custom\_logo() { echo '&lt;style type="text/css"&gt;#header-logo { background-image: url('.get\_bloginfo('template\_directory').'/images/excitesteps-icon.gif) !important; }&lt;/style&gt;'; } // custom admin login header link &amp; alt text function change\_wp\_login\_url() { echo bloginfo('url'); } function change\_wp\_login\_title() { echo get\_option('blogname'); } add\_filter('login\_headerurl', 'change\_wp\_login\_url'); add\_filter('login\_headertitle', 'change\_wp\_login\_title'); </code></pre> <p>rozhraní api <a href="http://codex.wordpress.org/widgets\_api#developing\_widgets\_on\_2.8.2b">widgetů</a> je nejrychlejší způsob, jak vytvořit widget, který lze znovu použít. příklad použití:</p><pre><code>class my\_widget extends wp\_widget { /** * php4 constructor */ function my\_widget() { my\_widget::\_\_construct(); } /** * php5 constructor */ function \_\_construct() { // actual widget processes } /** * echo the settings update form * * @param array $instance current settings */ function form($instance) { // outputs the options form on admin } /** * update a particular instance * * @param array $new\_instance new settings for this instance as input by the user via form() * @param array $old\_instance old settings for this instance * @return array settings to save or bool (false) to cancel saving */ function update($new\_instance, $old\_instance) { // processes widget options to be saved } /** * echo the widget content * * @param array $args display arguments including before\_title, after\_title, before\_widget, and after\_widget * @param array $instance the settings for the particular instance of this widget */ function widget($args, $instance) { // outputs the content of the widget } } register\_widget('my\_widget'); </code></pre> <p>z toho, co jsem četl v popisu pluginů, je kompatibilní s wp 2.9.2. vedle toho předpokládám, že z popisu hodně souvisí. proto bych nainstaloval <a href="http://wordpress.org/extend/themes/default">výchozí (wordpress theme)</a> a zkusil, jestli to funguje s tímto motivem. možná to funguje s tímto tématem?</p><p>možná právě narazíte na chybu javascript nebo máte javascript zakázán? zkontrolujte také tyto zdroje chyb, protože je napsáno, že plugin používá ajax, což znamená javascript.</p> Nijak. Toto PHP neřeší - neumí. <p>jak jsem uvedl v aktualizacích mé otázky ... další javascript pracující na stránce je v rozporu s kotevním skokem. implimented<em>more</em>js pro práci kolem konfliktu. adresa url vypadá téměř stejně jako předtím, ale s názvem parametru vloženým před symbol libry,</p><p><code>http://www.example.com/?cat=15&amp;hi=#post-170</code></p><p>ale používám jquery-howto's <a href="http://jquery-howto.blogspot.com/2009/09/get-url-parameters-values-with-jquery.html">'plugin' pro získání url parametrů.</a> </p><pre><code>$.extend({ geturlvars: function(){ var vars = [], hash; var hashes = window.location.href.slice(window.location.href.indexof('?') + 1).split('&amp;'); for(var i = 0; i &lt; hashes.length; i++) { hash = hashes[i].split('='); vars.push(hash[0]); vars[hash[0]] = hash[1]; } return vars; }, geturlvar: function(name){ return $.geturlvars()[name]; } }); </code></pre><p>načítám číslo příspěvku přiřazeného parametru 'hi' url a přejděte na 20px nad příspěvkem se stejným id.</p><pre><code> //'hi' var used to jump to anchor var hi = $.geturlvar('hi'); if ( hi ) { //scroll to link or search results if url var 'hi' is present $(window).scrolltop($(hi).position().top-20); </code></pre><p>jquery plugin kód a můj vlastní kód výše jít v mém souboru javascript, který je obsažen v header.php</p> Máš v php povolený načítání modulů, který jsou potřeba? <p>můžete použít funkci wordpress get\_children. i když si nemyslím, že je to rozdíl, výkon-moudrý.</p><pre><code>&lt;?php while (have\_posts()) : the\_post(); ?&gt; &lt;?php $attachment = array\_values( get\_children( array( 'post\_parent' =&gt; $post-&gt;id, 'post\_type' =&gt; 'attachment', 'post\_mime\_type' =&gt; 'image', 'order' =&gt; 'asc', 'numberposts' =&gt; 1 ) ) ); ?&gt; &lt;div class="searchitem" style="clear:both;"&gt; &lt;h3 id="post-&lt;?php the\_id(); ?&gt;"&gt; &lt;?php if( $attachment ) echo '&lt;img src="' . wp\_get\_attachment\_url($attachment[0]-&gt;id) . '" class="post-attachment" /&gt;'; ?&gt; &lt;a href="&lt;?php the\_permalink() ?&gt;" rel="bookmark" title="permanent link to &lt;?php the\_title\_attribute(); ?&gt;"&gt;&lt;?php the\_title(); ?&gt;&lt;/a&gt;&lt;/h3&gt; &lt;small&gt;&lt;?php the\_time('l, f js, y') ?&gt;&lt;/small&gt; &lt;div class="excerpt"&gt;&lt;?php echo $post-&gt;post\_excerpt; ?&gt;&lt;/div&gt; &lt;div class="postmetadata"&gt;posted in &lt;?php the\_category(', ') ?&gt; | &lt;?php comments\_popup\_link('no comments &amp;#187;', '1 comment &amp;#187;', '% comments &amp;#187;'); ?&gt;&lt;/div&gt; &lt;/div&gt; &lt;?php endwhile; ?&gt; </code></pre> Nahrajes tam phpmyadmin, udelas si export databaze do souboru a na novym webu udelas pres phpmyadmin zase import. Vsechno si zalohuj, nic nemaz, dokud si nebudes jistej, ze to opravdu bude fungovat. Dej pozor na kodovani cestiny. <p>nevím, jaké konkrétní rozvržení cesty na vašem webovém serveru, ale položky z protokolu chyb se nedívám na mě, že je to konkrétně wordpress související:</p><blockquote> <p>neplatná metoda v požadavku n. n</p> </blockquote><p>tato chyba je způsobena neplatným požadavkem http. každý požadavek http má metodu. určitě to chybělo v požadavku, který vedl k položce protokolu.</p><blockquote> <p>soubor neexistuje:/var/www/vhosts/default/htdocs/tv2</p> </blockquote><p>a <em> soubor neexistuje </em> zpráva není normálně vytvořena, když php skript vrátí 404 záhlaví odpovědí. takže nejvíce jistě, tato chyba nebyla hlášena wordpress, ale server sám. konfigurace mod\_rewrite pro váš blog wordpress byla pravděpodobně nedostupná.</p><blockquote> <p>adresářový index zakázán direktivou options:/var/www/html /</p> </blockquote><p>to mi připadá stejně. pokud je <code>/var/www/html/</code> webroot vašeho blogu, pak to ukazuje, že index.php nebyl nalezen nebo nebyl vyhledán jako index adresáře vaším webovým serverem.</p><hr><p>takže nakonec to vypadá jako webserver konfigurace problém pro mě. trvale přestavba permalinků by zde tehdy nepomohla. pokud si nejste jisti, můžete použít <a href="http://codex.wordpress.org/user:hakre/permafrost">permafrost (wordpress plugin)</a> . související otázka regaring 404 chyb a permalinks je: <a href="https://wordpress.stackexchange.com/questions/3954/single-type-php-not-working-delivering-404">single-type.php nefunguje, dodává 404.</a> </p> <p>nejlepší je vytvořit šablonu stránky s následujícím kódem. také se musíte rozhodnout, zda budete používat značku nebo kategorii. níže uvedený kód předpokládá, že používáte kategorii.</p><pre><code>&lt;div class="news"&gt; &lt;?php //the query wp\_query('showposts=5&amp;category\_name=news'); //the loop if ( have\_posts() ) : while ( have\_posts() ) : the\_post(); ?&gt; &lt;h2&gt;&lt;a href="&lt;?php the\_permalink() ?&gt;" rel="bookmark" title="permanent link to &lt;?php the\_title\_attribute(); ?&gt;"&gt;&lt;?php the\_title(); ?&gt;&lt;/a&gt;&lt;/h2&gt; &lt;div class="post\_content"&gt; &lt;?php the\_excerpt(); ?&gt; &lt;/div&gt; &lt;? endwhile; endif; //reset query wp\_reset\_query(); ?&gt; &lt;/div&gt; &lt;div class="events"&gt; &lt;?php //the query wp\_query('showposts=5&amp;category\_name=events'); //the loop if ( have\_posts() ) : while ( have\_posts() ) : the\_post(); ?&gt; &lt;h2&gt;&lt;a href="&lt;?php the\_permalink() ?&gt;" rel="bookmark" title="permanent link to &lt;?php the\_title\_attribute(); ?&gt;"&gt;&lt;?php the\_title(); ?&gt;&lt;/a&gt;&lt;/h2&gt; &lt;div class="post\_content"&gt; &lt;?php the\_excerpt(); ?&gt; &lt;/div&gt; &lt;? endwhile; endif; //reset query wp\_reset\_query(); ?&gt; &lt;/div&gt; </code></pre>